java - Hibernate 加入 Spring boot 应用程序

标签 java sql-server spring hibernate

我正在将 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/

相关文章:

JavaFX 示例代码不播放视频,仅显示媒体播放器

sql - 根据前几天的计算进行递归计算

c# - 如何使用 Microsoft.SqlServer.Management.SqlParser 中的类将 T-SQL 解析为 AST

spring - 通过 SSL 连接 Informix JDBC

java - AMQP 异步监听器仅在事件发生后才开始监听消息

java - 在循环内部或外部声明一个对象?

Java正则表达式匹配元组

java - REST 端点 Spring Boot 中参数的自定义验证逻辑

sql-server - 是否可以将 SQL Server 2008 数据库的备份恢复到 SQL Server 2000 的实例上?

mysql - 如何在 Spring Boot 中使用 Thymeleaf 保存角色?