我正在尝试使用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。