在hibernate中级联保存,外键保存为null

时间:2011-07-21 11:29:04

标签: java hibernate

我有一个课程如下

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

}

class B{
  A a;

}

现在A的主键是自动生成的,所以我不能在A或B.B之前设置它。反向映射A.And B中的对象最初是null。 这映射到DB中的2个表A和B.如果我有一个对象A,其Set包含2个记录,那么当我保存对象A然后在B.中创建2个记录。现在我的代码工作正常。但是当我看到recods时在B中我发现对应A的外键是空白的。怎么来的?

TABLE B structure
BId Aid Bname  

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

1 个答案:

答案 0 :(得分:4)

您需要正确设置关系的两侧

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属性Hibernates bizarre interpretation of inverse ;)上的这篇博客文章以及Working bi-directional links上的这个hibernate doc