java如何在JPA(Hibernate)中映射一对多关系和复合主键?
我的桌子是这样的:
School
-------
school_id (pk)
...
Student
school_id (pk) (fk)
student_id (pk)
...
因此,使用JPA(Hibernate),我尝试了类似的方法
@Entity
@Table("SCHOOL")
public School {
@Column(name = "SCHOOL_ID")
private String schoolId;
@OneToMany
private List<Student> students;
}
@Entity
@Table("STUDENT")
public Student {
@EmbeddedId
private StudentPK studentPK;
@ManyToOne
@JoinColumn(name = "SCHOOL_ID")
private School school;
}
@Embeddable
public StudentPK implements Serializable {
@Column(name = "SCHOOL_ID")
private String schoolId;
@Column(name = "STUDENT_ID"
private String studentId;
}
当我这样做时,我经常会收到一个错误,表明在运行时违反了外键约束。我怀疑JPA试图生成一个名为“SCHOOL_ID”的新外键,而不是使用我的组合键中的现有列,但我不确定如何强制它使用现有列
# 1 楼答案
这些关系的映射方式应该有所不同:
注意
School.students
上的@OneToMany.mappedBy
属性和Student.school
上的@MapsId
注释第2.4.1节JPA 2.2 spec中讨论了派生恒等式(带有示例)