我已经进行了自己的测试,并且不相信这是可能的,但我希望得到一些确认。
我有两个使用hibernate Child
和Parent
持久化的对象。 Child
始终引用单个Parent
,而Parent
具有一组Child
个对象。除此之外,父级还有一个收藏夹列表,其中包含子对象。
使用以下HBM定义对其进行映射:
<class name="Parent" table="parent">
<id name="id" column="id">
<generator class="increment"/>
</id>
<set cascade="all,delete-orphan" inverse="true" name="children">
<cache usage="nonstrict-read-write"/>
<key column="parent_id"/>
<one-to-many class="Child"/>
</set>
<list cascade="none" name="favorites">
<cache usage="nonstrict-read-write"/>
<key>
<column name="parent_id" not-null="false"/>
</key>
<index>
<column name="fav_index"/>
</index>
<one-to-many class="Child"/>
</list>
</class>
<class name="Child" table="child">
<id name="id" column="id">
<generator class="increment"/>
</id>
<many-to-one column="parent_id" name="parent" not-null="false"/>
</class>
我遇到的问题是parent_id
表中的列child
。当我持久化具有父对象引用的Child对象并且持久化具有收藏列表的Parent对象时,它工作正常。但是,当我尝试从父项的收藏夹列表中删除子项时,列child.parent_id
被设置为null,即使我没有从子项中删除父对象,也不会将其保留。
从我的测试中,除了在Parent映射中为收藏夹键列使用不同的列名之外,我认为除此之外还有其它方法。这样做似乎有点遗憾,因为这两列总是具有相同的值。
如果有可能,或者我必须使用两列吗?
由于