Hibernate - session.delete()不将标识符设置为null

时间:2012-03-14 13:46:19

标签: java hibernate orm

我有2个类,它们被映射为1对1

B 映射:

<one-to-one class="ClassA" constrained="true" name="a" property-ref="bId"/>

A 映射:

<property insert="false" name="bId" type="integer" update="false">
      <column length="200" name="BID" not-null="false"/>
 </property>
 <many-to-one class="ClassB"  name="b">
       <column name="BID" not-null="false"/>
 </many-to-one>

当我打电话时:

A a = (A) session.load(A.class, 1);    
session.delete(a.getB());

B 记录被删除,但 A 中的 BID 保持不变。为什么!?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

是的,这是正确的。 Hibernate不会修改对象a。 Hibernate做不到。在调用session.delete(a.getB())中,您给出了类B的实例。此实例不包含对对象a的任何引用。

您必须手动更改并更新它。

另一种可能性:

您将外键从A移动到B(在一对一关系中,哪个表具有外键并不重要)。当你删除B的实例时,你不需要更新A. [或者你使用cascade=all,delete-orphan,然后你可以将a中的引用设置为null并更新a,这将强制hibernate删除实例B.但我从未尝试过这种可能性。]