gpt4 book ai didi

java - hibernate中级联保存,外键保存为null

转载 作者:行者123 更新时间:2023-12-01 19:15:34 25 4
gpt4 key购买 nike

我有一个类如下

class A{
Set<B> = new HashSet<B>();

}

class B{
A a;

}

现在A的主键是自动生成的,所以我不能在A或B之前设置它。B具有A的逆映射。并且B中的A对象最初为空。这映射到数据库中的2个表A和B。现在,如果我有一个对象A,其集合包含2条记录,那么当我保存对象A时,就会在B中创建2条记录。现在我的代码工作正常。但是当我看到记录时在B中我发现A对应的外键是空白的。这是怎么回事?

TABLE B structure
BId Aid Bname

//Aid是A表主键的外键,Aid存储为null,为什么会这样?我希望Aid应该自动存储在B中

最佳答案

您需要正确设置关系的双方

parentA.getBChilds().add(childB);  
childB.setParentA(parentA); <-- Important see link below working bi

您可以在父级中创建链接管理方法来正确设置双方。

public class ParentA
{
...
public void addChildB(B pChild)
{
this.childsB.add(pChild);
pChild.setParentA( this );
}
...
}

将集合关系上的“inverse”属性设置为 true

<set name="bChilds" inverse="true">
<key column="bID"/>
<one-to-many class="childB"/>
</set>

也许您正在混合逆向和级联。要获得更好的解释,您可以阅读有关 hibernate inverse attribute Hibernates bizarre interpretation of inverse ;) 的博客文章以及 Working bi-directional links 上的这个 hibernate 文档

关于java - hibernate中级联保存,外键保存为null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6775305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com