我正在将 Spring boot MVC 应用程序与 hibernate ORM 结合使用。
我有一个学生表,其中包含其他表的外键。
Student.java:
@Entity
@Table(name = "STUDENT")
public class student{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long STUDENT_ID;
@OneToOne
@JoinColumn(name="COURSE_ID")
private Long COURSE_ID;
@OneToOne
@JoinColumn(name="ACDYEAR_ID")
private Long ACDYEAR_ID;
@OneToOne
@JoinColumn(name = "SEMESTER_ID")
private Long SEMESTER_ID;
}
学生存储库:
@Query(value="SELECT * FROM STUDENT INNER JOIN ACADEMICSYEAR ON STUDENT.ACDYEAR_ID = ACADEMICSYEAR.ACDYEAR_ID INNER JOIN ACADEMICSCOURSE ON STUDENT.COURSE_ID = ACADEMICSCOURSE.COURSE_ID where STUDENT_ID=?1",
nativeQuery=true)
public STUDENT findOneID(Long id);
sql server 中的相同查询返回填充的学年表和类(class)表,但这里给出了类似的错误
org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com.boot.model.STUDENT.COURSE_ID references an unknown entity: java.lang.Long
最佳答案
嘿,
它不起作用的原因是您尝试将Long
对象映射为实体
(因为OneToOne,ManyToOne
映射)。您应该将每个字段映射到另一个实体,而不是将其映射到 Long。或者,只获取 ids
两种解决方案:
第一个选项 - 仅获取 ID
删除所有@OneToOne
注释和JoinColumn
@Column(name="COURSE_ID")
private Long COURSE_ID;
@Column(name="ACDYEAR_ID")
private Long ACDYEAR_ID;
@Column(name = "SEMESTER_ID")
private Long SEMESTER_ID;
第二个选项
为每个表创建一个实体,即类(class)实体
、学期实体
和ACADEMICSYEAR实体并将每个位置的
Long更改为是那个实体
关于java - Hibernate 加入 Spring boot 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38119815/