Hibernate:将 parent 映射到 child 实体,对 child 中的一列有 2 个引用?
Hibernate: mapping parent to child entity with 2 references to one column in child?
我想在我的实体中有一个 cascade delete
。但我认为它正在停止,因为我有 2 对我 child entity
中的一列的引用。
在我的 child 狗实体中,我最初有以下字段:
@Column(name = "KENNEL_ID", insertable = false, updatable = false)
private String kennelId;
然后我添加了这个,因为我想获得与 parent 相关的所有 child 实体的列表:
@ManyToOne
@JoinColumn(name = "KENNEL_ID" )
private Kennel kennel;
在我的 parent Kennel 实体中,我还添加了这个以引用 child 中的字段,我添加了:
@OneToMany(mappedBy = "kennel",cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
private List<Dog> dogList= new ArrayList<Dog>();
在我添加第二个 child 引用和 parent 引用之前,级联删除适用于我的所有实体。但是,由于我已经添加了它们,所以它没有。
我该如何解决这个问题?
这不是将父子映射到相同的问题class.The问题是您需要手动维护双向关系的两端。
child.setParent(parent)
parent.addChild(child)
顺便说一句:仅在一侧(负责在数据库中存储关系的一侧)设置它,存储和重新加载实体在某些情况下也可以工作。 (而且您会在许多旧教程中发现这个肮脏的把戏)。但在我看来这是不好的做法。 (在您的测试用例中,需要在保存子项后重新加载父项之前清理缓存。)
public void setDogList(List<Dog> dogList) {
this.dogList.clear();
this.dogList.addAll(dogList);
}
我想在我的实体中有一个 cascade delete
。但我认为它正在停止,因为我有 2 对我 child entity
中的一列的引用。
在我的 child 狗实体中,我最初有以下字段:
@Column(name = "KENNEL_ID", insertable = false, updatable = false)
private String kennelId;
然后我添加了这个,因为我想获得与 parent 相关的所有 child 实体的列表:
@ManyToOne
@JoinColumn(name = "KENNEL_ID" )
private Kennel kennel;
在我的 parent Kennel 实体中,我还添加了这个以引用 child 中的字段,我添加了:
@OneToMany(mappedBy = "kennel",cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
private List<Dog> dogList= new ArrayList<Dog>();
在我添加第二个 child 引用和 parent 引用之前,级联删除适用于我的所有实体。但是,由于我已经添加了它们,所以它没有。
我该如何解决这个问题?
这不是将父子映射到相同的问题class.The问题是您需要手动维护双向关系的两端。
child.setParent(parent)
parent.addChild(child)
顺便说一句:仅在一侧(负责在数据库中存储关系的一侧)设置它,存储和重新加载实体在某些情况下也可以工作。 (而且您会在许多旧教程中发现这个肮脏的把戏)。但在我看来这是不好的做法。 (在您的测试用例中,需要在保存子项后重新加载父项之前清理缓存。)
public void setDogList(List<Dog> dogList) {
this.dogList.clear();
this.dogList.addAll(dogList);
}