Java 休眠和父/子关系

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

我正在一个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();

无论如何,实现这种行为并不困难,但我想知道是否存在一些处理此问题的标准工具或知名库。如果没有,原因是什么


谢谢

实现这类功能的一个简单方法是向模型类添加方便的方法,以确保双向链接的两个方向都已设置

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);
    }

这就要求你有一定的纪律性/记忆力来使用这些方法,而不是直接设置/添加;但最好将常用代码放在一个地方

强烈同意此评论-封装这些操作。强烈同意此评论-封装这些操作。