我正在使用Spring mvc和hibernate,我的SQL服务器数据库中有一个查找表。这个表有4列
@Entity
@Table(name = "VLE_LOOKUP_DATA")
public class Lookup_Data{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long ID;
@Column(name = "ENTITYNAME")
private String ENTITYNAME;
@Column(name = "CODE")
private String CODE;
@Column(name = "DESCRIPTION")
private String DESCRIPTION;
}
此表与多个表具有一对一关系,例如学生表。
@Entity
@Table(name = "STUDENT")
public class student{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long STUDENT_ID;
@OneToOne
@JoinColumn(name = "DEPARTMENT_ID")
private Lookup_Data DEPARTMENT_ID;
@Column(name = "Name")
private String Name;
@OneToOne
@JoinColumn(name = "GENDER_ID")
private Lookup_Data GENDER_ID;
}
此处来自Lookup Table的外键不是Lookup data的主键(ID)。列名 CODE 在其他表中被引用为外键。这就是为什么当我运行时在这个例子中,OneToOne关系给出了错误
java.sql.SQLException: Conversion failed when converting the varchar to data type int.
因为代码是字符串值。
有没有办法在 Spring Mvc启动应用程序中实现这种情况?
注意:在 sql server 中,此查询可以完成所需的工作。
SELECT * FROM STUDENT as e left join VLE_LOOKUP_DATA as di on e.DEPARTMENT_ID=di.CODE
答案 0 :(得分:0)
JPA旨在支持广泛的DBMS(数据库服务器),因此它只支持SQL标准规范。
在您当前的情况下,SQL规范不支持2个字段之间的比较等于(仅可能由sql server支持),因此JPA会引发此错误。所以我认为不是使用关系映射来获取Lookup_data,而是可以执行普通的JPQL或本机查询。