這真的取決於由Entity3
存的名單是否設置爲級聯操作,如PERSIST
,MERGE
和DELETE
。
如果列表配置爲級聯,那麼所有你需要做的是:
- 設置的
Entity4
父。
- 將
Entity4
添加到其父項列表併合並修改的父項。
如果未配置級聯,那麼你需要做的:
- 設置的
Entity4
父。
- 堅持新創建的實例
Entity4
。
- 將
Entity4
添加到其父項列表併合並修改的父項。
現在你可能會問,爲什麼Entity4
的母公司必須更新列表並隨後在兩種情況下合併?
這是爲了確保關聯的兩側都正確更新並正確指向彼此。它很有可能考慮到關聯的父節點已經加載到持久化上下文中的情況,因此將該子節點添加到數據庫不會刷新,並且對於已加載的實體可見,除非刷新它。在這種情況下,最簡單的解決方案是始終正確修改雙方。
public class ParentEntity {
// add child to the parent entity, maintains association
public void addChild(ChildEntity child) {
if (child.getParent() != null) {
child.getParent().removeChild(child);
}
child.setParent(this);
children.add(child);
}
// remove child from parent, disassociates association
public void removeChild(ChildEntity child) {
if (this.equals(child.getParent())) {
child.setParent(null);
children.remove(child);
}
}
}
我經常發現它有助於揭露輔助方法,就像上面我的域模型,使我的代碼並不需要與需要維護的關聯有關。我也可能會讓父實體列表的setter成爲私有的,這樣只有Hibernate才能使用它,以便強制嚴格使用addChild
/removeChild
方法。
到目前爲止你做了什麼?分享你的代碼 – FuSsA