我已经进行了自己的测试,不相信这是可能的,但希望得到一些确认。
我有两个对象正在使用休眠Child
和Parent
. AChild
总是有一个对单个的引用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_id
被设置为空,即使我没有在它被持久化之前从孩子中删除父对象。
根据我的测试,除了在 Parent 映射中为收藏夹键列使用不同的列名之外,我认为没有其他方法。这样做似乎有点可惜,因为这两列总是具有相同的值。
如果这是可能的,有没有人需要使用两列?
谢谢