java - 共享外键 Hibernate

标签 java hibernate jpa

我正在尝试使用 JPA + Hibernate 编写此模型 enter image description here

这是我的实体一级代码

一级实体

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

相关文章:

java - 避免 Hibernate LazyInitializationExceptions 的架构

java - GlassFish 2.1.1 - TopLink (JPA1) 持久性异常 7106 - 字符串加密之谜

java - 如何仅使用主键将引用的持久类序列化为 JSON

Java程序: Leap Year Calculator

java - Android Java IF Else 超链接

java - 为什么这个文件没有被删除?

mysql - JpaRepository计数查询QuerySyntaxException实体未映射

java - 优化if-else语句android studio

java - Hibernate多对多映射到同一实体单向

java - JPA:将数据库列映射到实体中的两个字段