java - 如何映射 OneToOne 递归实体?
问题描述
我正在寻找如何在我的 Branch 对象中解决递归和双向单向关系:
@Entity
@Table("BRANCH")
public class Branch {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@OneToOne
@JoinColumn(name = "id")
private Branch parent;
@OneToOne(mappedBy = "parent")
@JoinColumn(name = "parent_id")
private Branch child;
//Getters and Setters
}
它是一种公认的模式吗?
解决方案
带有自引用的双向@OneToOne 映射的正确方法:
@Entity
@Table("BRANCH")
public class Branch {
@OneToOne
@JoinColumn(name = "parent_id")
private Branch parent;
@OneToOne(mappedBy = "parent")
private Branch child;
- 这是子字段中对象的祖先
- 这是父字段中对象的后代
- 层次结构是:父>这个>子
您不需要两个外键,关系拥有方的单个外键就足够了。在 JPA 中,逆 OneToOne 必须使用 mappedBy 属性。
推荐阅读
- python - 有人可以帮我将 **for 循环** 替换为 **while 循环** 我正在努力弄清楚吗?
- python - 如何打印存储/引用地址/位置的列表元素的值?
- docker - 卡夫卡连接,码头工人
- google-cloud-platform - 特定区域的 VM 磁盘大小限制
- xslt - XSLT:参数化模板
- sweetalert2 - 如何将 @emotion.sh 变量作为 customClass 传递给 SweetAlert 2 v9?
- sql - 有没有一种方法可以按具有“集群”时差的记录进行分组?
- java - 类作为返回类型
- python - 使 pd.to_datetime() 更快
- excel - 正则表达式模式找到给出前 2 位数字的 5 位数字?