在hibernate中使用相同的列进行多次映射

时间:2013-01-03 17:25:17

标签: java hibernate orm

我已经进行了自己的测试,并且不相信这是可能的,但我希望得到一些确认。

我有两个使用hibernate ChildParent持久化的对象。 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映射中为收藏夹键列使用不同的列名之外,我认为除此之外还有其它方法。这样做似乎有点遗憾,因为这两列总是具有相同的值。

如果有可能,或者我必须使用两列吗?

由于

0 个答案:

没有答案