如何在JPA中为多对一关系配置级联类型?

时间:2018-07-16 22:38:52

标签: hibernate jpa foreign-keys spring-data-jpa

我对Hibernate Java持久性框架还比较陌生,我试图了解Cascade类型是如何工作的。

我有两个表,一个是作业,另一个是学生。 作业表有一个AssignmentNumber列,assignmentDescription列,assignmentGrade列和studentNumber列(这是Student列中的外键)。

Assignment|
-------

- assignmentNumber
- assignmentDescription
- assignmentGrade
- studentNumber

Student |
-------
- studentNumber
- studentFirst
- studentLast

“学生”和“作业”表之间存在多对一关系,因为可以为一个学生分配多个作业。因此,在AssignmentEntity类中,我具有以下设置:

@Entity
@Table(name = "ASSIGNMENT")
public class AssignmentEntity {

@Column(name = "assignmentNumber")
private Long assignmentNumber;

@Column(name = "assignmentGrade")
private String assignmentGrade;

@Column(name = "assignmentDescription")
private String assignmentDescription;

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "studentNumber")
private StudentEntity studentEntity;

在StudentEntity类中:

@Entity
@Table(name = "STUDENT")
public class StudentEntity {

@Id
@Column(name = "studentNumber")
private String studentNumber;

@Column(name = "studentFirst")
private String studentFirst;

@Column(name = "studentLast")
private String studentLast;

这是我遇到的问题:如何将层叠类型更改为什么,以便如果学生已经存在,则在保存新作业时不会有新条目?我只想在学生表中不存在新学生的情况下保存作业,才将其插入到学生表中。

1 个答案:

答案 0 :(得分:0)

如果使用正确,JPA已经在这样做。您没有描述如何创建实体实例,但是这是它的外观(对于已经存在的学生):

  1. resolution /存储库中加载Student
  2. EntityManager引用该实例。
  3. 利润。

关键不是通过调用Assignment并设置其Student来创建new的实例。