我有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 保持不变。为什么!?任何帮助表示赞赏。
答案 0 :(得分:1)
是的,这是正确的。 Hibernate不会修改对象a。 Hibernate做不到。在调用session.delete(a.getB())
中,您给出了类B的实例。此实例不包含对对象a的任何引用。
您必须手动更改并更新它。
另一种可能性:
您将外键从A移动到B(在一对一关系中,哪个表具有外键并不重要)。当你删除B的实例时,你不需要更新A. [或者你使用cascade=all,delete-orphan
,然后你可以将a中的引用设置为null并更新a,这将强制hibernate删除实例B.但我从未尝试过这种可能性。]