删除子类时,Hibernate不会删除主行

时间:2014-09-10 11:55:06

标签: java mysql hibernate

我有以下hibernate映射和java类结构:

<class name="A" abstract="true" table="tableA" lazy="false">
        <id name="id" type="long">
            <generator class="native" />
        </id>

        <discriminator column="type" type="string" />       
        <!--common properties-->    

        <subclass name="B" abstract="true" >        
            <join table="tableB">
                <key column="aId"/>             
                <!--subclass common properties-->                                           
            </join> 

            <subclass name="B1" discriminator-value="B1TYPE" >
                <!--subclass properties-->                                  
            </subclass>     

            <subclass name="B2" discriminator-value="B2TYPE" >
                <!--subclass properties-->          
            </subclass>         
    </subclass>         
</class>

 <class name="C" table="tableC">
        <id name="id" type="long">
                <generator class="native" />
            </id>
            <set name="items" cascade="all,delete-orphan">
                <key column="id" not-null="true" />
                <one-to-many class="A" />
            </set> 
     </class>

和java部分:

abstract class A
{
}

abstract class B extends A
{
}

class B1 extends B
{
}
class B2 extends B
{
}

class C
{
  Set<A> items;
}

问题在于,有些行已从tableB删除,但未从tableA删除。可能的原因是什么?

编辑:

class C删除项目时,C从其存储库类中存储:

C.items.remove(B1);
CRepository.store(C);

1 个答案:

答案 0 :(得分:2)

原因是您必须明确定义指向on-delete的{​​{1}}外键声明的操作tableB

默认情况下,这是aId:这意味着当您删除任何B实体时,不会删除相应的A相关实体。

查找有关Hibernate文档的更多信息,5.1.11.3. Key

试试这个映射:

noaction