【问题标题】:Hibernate Joins In Spring boot application在 Spring Boot 应用程序中加入 Hibernate
【发布时间】:2016-06-30 09:59:25
【问题描述】:

我正在使用带有休眠 ORM 的 Spring Boot MVC 应用程序。

我有一张学生表,里面有其他表的外键。

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;
}

StudentRepository:

@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 中的相同查询返回填充的学年表和课程表,但这里给出了类似的错误

   org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com.boot.model.STUDENT.COURSE_ID references an unknown entity: java.lang.Long

【问题讨论】:

  • JPA 认为Long 是链接实体的名称。您必须使用链接实体的类名。例如,如果COURSE_ID 链接到COURSE 表,您将拥有private COURSE course_id。但是,您的注释将意味着存在一对一的关系,这是没有意义的。

标签: java sql-server spring hibernate


【解决方案1】:

你好,

它不起作用的原因是您试图将Long 对象映射为entity(因为OneToOne,ManyToOne 映射)。您应该将每个字段映射到另一个实体,而不是将其映射到 Long。或者,只需获取 ID

两种解决方案:

第一个选项 - 仅获取 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;

第二个选项

为每个表创建一个实体,即Course entitySemester entity 和 ACADEMICSYEAR entityand change theLong in each place to be that entity

【讨论】:

    【解决方案2】:

    而不是在关联中具有实体的 id 类型,而是具有实体的类型。示例

    @Entity
    @Table(name = "STUDENT")
    
    public class student{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long STUDENT_ID;   
    
    @OneToOne
    @JoinColumn(name="COURSE_ID")
    private Course course;
    }
    

    其中Course是单向关系中的关联实体

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 2020-03-18
      • 2014-08-22
      • 2021-08-18
      相关资源
      最近更新 更多