这是我的实体一级代码
一级实体
@Entity
public class LevelOne {
@EmbeddedId
LevelOnePK levelOnePK;
@OneToOne(mappedBy = "levelOne")
private LevelTwo levelTwo;
private String valueCol;
//getters setters omitted
}
一级PK
@Embeddable
public class LevelOnePK implements Serializable {
private int idOne;
private int idTwo;
private int idThree;
//getters setters omitted
}
二级实体
@Entity
public class LevelTwo {
@Id
private int LondId;
@OneToOne
@JoinColumn(name = "lone_id_one")
@JoinColumn(name = "lone_id_two")
@JoinColumn(name = "lone_id_three")
private LevelOne levelOne;
@OneToOne(mappedBy = "levelTwo")
private LevelThree levelThree;
//getters setters omitted
}
三级实体
@Entity
public class LevelThree {
@Id
private int LondId;
@OneToOne
@JoinColumn(name="l_one", referencedColumnName="lone_id_one", insertable=false, updatable=false)
@JoinColumn(name="l_two", referencedColumnName="lone_id_two", insertable=false, updatable=false)
@JoinColumn(name="l_three", referencedColumnName="lone_id_three", insertable=false, updatable=false)
private LevelTwo levelTwo;
private String valueCol;
//getters setters omitted
}
这段代码的作用
此代码成功地将一级实体的 PK 作为外键映射到二级实体。
我遇到问题的地方 我无法将二级实体的复合外键映射到三级实体并收到此错误
Caused by: org.hibernate.AnnotationException: referencedColumnNames(lone_id_one, lone_id_two, lone_id_three) of com.example.testQuestions.LevelThree.LevelThree.levelTwo referencing com.example.testQuestions.LevelTwo.LevelTwo not mapped to a single property
我哪里做错了?
最佳答案
您的模型似乎不正确。 LevelThree 中的 FK 是对 LevelOne 的引用,而不是 LevelTwo。
如果您希望 LevelThree 引用 LevelTwo,则 FK 将是单个 Long,因为 LevelTwo 的 PK 是单个 Long
关于java - 共享外键 Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61713567/