我在Java应用程序中使用Hibernate,我觉得可以更好地管理父/子关系。
我有一组复杂的实体,它们之间有某种关系(一对多,多对多,一对一,单向和双向)。 每次保存实体并且它具有父级时,为了建立关系,父级必须将子级添加到其集合中(考虑到一对一的关系)。 例如:
Parent p = (Parent) session.load(Parent.class, pid);
Child c = new Child();
c.setParent(p);
p.getChildren().add(c);
session.save(c);
session.flush();
以同样的方式,如果我删除一个孩子,那么我也必须从父系列中明确地删除它。
Child c = (Child) session.load(Child.class, cid);
session.delete(c);
Parent p = (Parent) session.load(Parent.class, pid);
p.getChildren().remove(c);
session.flush();
我想知道是否有一些最佳实践以不同的方式完成这项工作:当我保存子实体时,自动将其添加到父系列。如果我删除一个孩子,通过删除孩子等自动更新父集合
例如,
Child c = new Child();
c.setParent(p);
session.save(c); // Automatically update the parent collection
session.flush();
或
Child c = (Child) session.load(Child.class, cid);
session.delete(c); // Automatically updates its parents (could be more than one)
session.flush();
无论如何,实现这种行为并不困难,但我想知道是否存在一些处理此问题的标准工具或众所周知的库。如果没有,原因是什么?
由于
答案 0 :(得分:4)
实现此类事情的一种简单方法是为模型类添加便捷方法,以确保设置双向链接的两个方向
public class Parent {
...
public void addChild(Child child) {
this.getChildren.add(child);
child.setParent(this);
}
public void removeChild(Child child) {
this.getChildren.remove(child);
child.setParent(null);
}
这需要您使用这些方法而不是直接设置/添加的纪律/纪念;但最好将常用代码放在一个地方。