我正在尝试使用JPA + Hibernate编码此模型
java - 共享外键 hibernate-LMLPHP

这是我的实体一级代码

实体一级

@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。

10-07 20:38