为什么';t Hibernate设置孩子';是指父母吗?

为什么';t Hibernate设置孩子';是指父母吗?,hibernate,hibernate-cascade,Hibernate,Hibernate Cascade,考虑类父: { ... @OneToMany(cascade=CascadeType.ALL,mappedBy = "parent") Set<Child> children; ... } 如果我在应用程序中创建一个新的子对象,并将其放入父对象的children字段中,然后持久化父对象,为什么Hibernate不自动更新子对象的父字段(以便设置parentID列?,因为Hibernate不是一个神奇的工具。它被设计为使用您设计和编写的POJO,并且它

考虑类父:

{
    ...
    @OneToMany(cascade=CascadeType.ALL,mappedBy = "parent")
    Set<Child> children;
    ...
}

如果我在应用程序中创建一个新的子对象,并将其放入父对象的children字段中,然后持久化父对象,为什么Hibernate不自动更新子对象的父字段(以便设置parentID列?

,因为Hibernate不是一个神奇的工具。它被设计为使用您设计和编写的POJO,并且它不会修改这些POJO的字节码。如果需要,您有责任初始化关联的另一方

另一个原因是,这是JPA规范(它必须遵守)指定其工作方式的方式

但是没有什么能阻止你找到一种方法

public void addChild(Child c) {
    this.children.add(c);
    c.parent = this;
}

它不必修改字节码。当保存父对象时,它不能仅仅验证是否“填充”了子对象,如果是,则从子对象内部更新引用吗?由于两个对象的含义不同,它如何决定您是否打算将子对象添加到父对象?家长说:是的,这是我的一个孩子。孩子说:不,我没有父母。那么,谁应该相信冬眠呢?孩子还是父母?规范已经决定:它必须相信协会的所有者,也就是孩子。我确实想到过这种情况,但我认为应该相信协会的“逻辑”所有者。我现在意识到这种方法可能会导致严重的问题。非常感谢。上面显示的代码是单向关系还是双向关系?如果我的问题太琐碎,请原谅,我本周从hibernate/JPA/Springboot开始。@AsmaRahimAliJafri你应该能够自己弄清楚:如果关系中有两个方面,如果代码显示
this
有子项,
子项有一个父项,即
this`,那么根据定义,这是一种双向关联。如果是单向的,要么孩子们没有父母(因此,从父母到孩子是单向的一对一),要么家长们没有孩子(因此,从孩子到父母是单向的一对一)。
public void addChild(Child c) {
    this.children.add(c);
    c.parent = this;
}