共享外键

问题描述 投票:0回答:1

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

我在哪里做错了?

java hibernate jpa
1个回答
0
投票

你的模型似乎并不正确。LevelThree中的FK是对LevelOne的引用,而不是LevelTwo。

如果你想让LevelThree有一个对LevelTwo的引用,FK将是一个单一的Long,因为LevelTwo的PK是一个单一的Long。

© www.soinside.com 2019 - 2024. All rights reserved.