Java 休眠和父/子关系
我正在一个Java应用程序中使用Hibernate,我觉得在管理父/子关系方面可以做得更好 我有一组复杂的实体,它们之间有某种关系(一对多,多对多,一对一,单向和双向)。 每次保存一个实体并且该实体有一个父实体时,要建立关系,父实体必须将子实体添加到其集合中(考虑一对五的关系)。 例如:Java 休眠和父/子关系,java,hibernate,entity-relationship,Java,Hibernate,Entity Relationship,我正在一个Java应用程序中使用Hibernate,我觉得在管理父/子关系方面可以做得更好 我有一组复杂的实体,它们之间有某种关系(一对多,多对多,一对一,单向和双向)。 每次保存一个实体并且该实体有一个父实体时,要建立关系,父实体必须将子实体添加到其集合中(考虑一对五的关系)。 例如: Parent p = (Parent) session.load(Parent.class, pid); Child c = new Child(); c.setParent(p); p.getChildren
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();
或
无论如何,实现这种行为并不困难,但我想知道是否存在一些处理此问题的标准工具或知名库。如果没有,原因是什么
谢谢实现这类功能的一个简单方法是向模型类添加方便的方法,以确保双向链接的两个方向都已设置
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);
}
这就要求你有一定的纪律性/记忆力来使用这些方法,而不是直接设置/添加;但最好将常用代码放在一个地方 实现这类功能的一个简单方法是向模型类添加方便的方法,以确保双向链接的两个方向都已设置
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);
}
这就要求你有一定的纪律性/记忆力来使用这些方法,而不是直接设置/添加;但最好将常用代码放在一个地方 强烈同意此评论-封装这些操作。强烈同意此评论-封装这些操作。