【发布时间】:2020-03-01 16:24:04
【问题描述】:
我有 2 个实体类:学生是父类,地址是子类,具有一对一映射:
学生
student_id int (pk), roll_no int (pk), 名称 varchar
地址
student_id (pk, fk), 国家变量
地址实体中的student_id既是主键也是外键
学生实体班:
@Entity
@Table(name = "student")
public class Student {
@EmbeddedId
private StudentPrimaryKey studentPrimaryKey;
@Column(name = "name")
private String name;
@OneToOne(mappedBy = "student", cascade = CascadeType.ALL)
private Address address;
........
StudentPrimaryKey 类:
@Embeddable
public class StudentPrimaryKey implements Serializable{
@Column(name = "student_id")
private long id;
@Column(name = "roll_no")
private long rollNo;
....
地址实体类:
@Entity
@Table(name = "address")
public class Address {
@Id
@Column(name = "student_id")
private long id;
@Column(name = "country")
private String country;
@OneToOne
@JoinColumn(name = "student_id")
@MapsId
private Student student;
.......
例外是 - org.hibernate.AnnotationException:@MapsId 映射中的隐式列引用失败,尝试使用显式referenceColumnNames
我知道父表中有 2 个主键列,@MapsId 无法确定应该将外键映射到父表中的哪一个,所以我尝试在地址实体中使用 referencedColumnName -
@OneToOne
@JoinColumn(name = "student_id", referencedColumnName = "student_id")
@MapsId
private Student student;
新例外: 在@MapsId 映射中找不到列引用:roll_no
从上面,它试图从父类的复合主键中找到缺失的列,但我们不需要这个列。
[Hibernate - Composite Primary Key contains Foreign Key
这是共享相同问题的链接之一,即 JPA/hibernate 不允许部分复合主键成为外键。
请提供您的支持以帮助我处理此问题。
【问题讨论】: