2010-03-23 50 views
0

我试图弄清楚这个映射,不知何故它只是逃避我。这很刺激,因为它看起来应该是一个普通的情况。无法找出与连接表的一对多双向关联

我有一个基本的父类和子类,它们之间有一个连接表。 Child类依赖于Parent:如果Child从Parent移除,则Child也应该被删除。 Hibernate文档说这是通过指定cascade =“all,delete-orphan”来工作的。

但架构不会允许它。如果我使用<一对多>,我不能指定一个列,并且连接不起作用。如果我使用每个Hibernate文档的<多对多unique =“true”>,我无法指定级联。

这里是我现在,从Hibernate docs采取:

<class name="Parent" table="parent_table"> 
    <id name="id" column="id"> 
     <generator class="assigned"/> 
    </id> 
    <property name="name" type="string"/> 
    <list table="my_join_table" name="children"> 
     <key column="parent_id"/> 
     <list-index column="idx"> 
     <!-- how do I put a cascade on this!? --> 
     <many-to-many column="child_id" 
         class="Child" 
         unique="true"/> 
    </list> 
</class> 

<class name="Child" table="child_table"> 
    <id name="id" column="id"> 
     <generator class="assigned"/> 
    </id> 
    <property name="name" type="string"/> 
    <join table="my_join_table" inverse="true" optional="false"> 
     <key column="child_id"/> 
     <many-to-one name="parent" column="parent_id" not-null="true"/> 
    </join> 
</class> 

回答

0

好吧,我理解了它自己,终于。

级联属性需要去列表元素上,而不是许多一对多:

<list table="my_join_table" name="children" cascade="all,delete-orphan"> 
    <key column="parent_id"/> 
    <list-index column="idx"> 
    <!-- how do I put a cascade on this!? --> 
    <many-to-many column="child_id" 
        class="Child" 
        unique="true"/> 
</list>