gpt4 book ai didi

java - Hibernate:将父实体映射到子实体,并有 2 个对子实体中一列的引用?

转载 作者:行者123 更新时间:2023-11-29 04:46:29 26 4
gpt4 key购买 nike

我正在尝试在我的实体中进行级联删除。但我认为它正在停止,因为我有 2 对我的 child entity 中的一列的引用。

在我的 child Dog 实体中,我最初有以下字段:

 @Column(name = "KENNEL_ID", insertable = false, updatable = false)
private String kennelId;

然后我添加了这个,因为我想获得与父实体相关的所有子实体的列表:

 @ManyToOne
@JoinColumn(name = "KENNEL_ID" )
private Kennel kennel;

在我的父 Kennel 实体中,我还添加了这个以引用我添加的子项中的字段:

 @OneToMany(mappedBy = "kennel",cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
private List<Dog> dogList= new ArrayList<Dog>();

在我添加第二个子引用和父引用之前,级联删除适用于我的所有实体。但是,由于我已经添加了它们,所以它没有。

我该如何解决这个问题?

最佳答案

这不是将父子映射到同一个类的问题。问题是您需要手动维护双向关系的两端。

child.setParent(parent)
parent.addChild(child)

顺便说一句:仅在一侧(负责在数据库中存储关系的一侧)设置它,存储和重新加载实体在某些情况下也可以工作。 (而且您会在许多旧教程中发现这个肮脏的把戏)。但在我看来这是不好的做法。 (在您的测试用例中,需要在保存子项后重新加载父项之前清理缓存。)

public void setDogList(List<Dog> dogList) {
this.dogList.clear();
this.dogList.addAll(dogList);
}

关于java - Hibernate:将父实体映射到子实体,并有 2 个对子实体中一列的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36919272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com