我正在尝试使用JPA + Hibernate编码此模型
这是我的实体一级代码
实体一级
@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。