配置文件代码
<class name="com.et.pojo.BigType" table="tb_bigtype">         
<id name="id" type="java.lang.Integer">             
<column name="id"/>             
<generator class="increment"/>         
</id>         
<property name="bigName" type="java.lang.String">            
<column name="bigName"/>         
</property>         
<property name="createTime" type="java.sql.Date">            
<column name="createTime"/>         
</property>         
<set name="smallTypes" inverse="true" cascade="all" lazy="false">            
<key column="bigId"></key>            
<one-to-many class="com.et.pojo.SmallType"/>         
</set>  
</class>加了cascade=“all”,还是无法级联进行删除,提示外键问题,Cannot delete or update a parent row: a foreign key constraint fails,烦请高手帮忙Hibernate

解决方案 »

  1.   

    inverse改成false看能解决问题么,默认是false。你看看
      

  2.   

    Inverse和Cascade的比较Inverse:负责控制关系,默认为false,也就是关系的两端都能控制,但这样会造成一些问题,更新的时候会因为两端都控制关系,于是重复更新。一般来说有一端要设为true。
    Cascade:负责控制关联对象的级联操作,包括更新、删除等,也就是说对一个对象进行更新、删除时,其它对象也受影响,比如我删除一个对象,那么跟它是多对一关系的对象也全部被删除。
    举例说明区别:删除“一”那一端一个对象O的时候,如果“多”的那一端的Inverse设为true,则把“多”的那一端所有与O相关联的对象外键清空;如果“多”的那一端的Cascade设为Delete,则把“多”的那一端所有与O相关联的对象全部删除。
      

  3.   

    cascade为all的时候级联删除一的一端会级联删除多的一端 而此时inverse为true则表明由多的一端来维护关系 则多的一端被级联删除的时候会自动将关系解除掉 你应该是别的地方的问题 不是这边inverse和cascade的问题
      

  4.   

    手动改表的外键
    alter tablename drop foreign key ...
    alter tablename drop key ....
    alter tablename add foreign key ... on delete cascade
      

  5.   

    谢谢各位帮忙解答,这个问题已经解决,原因是还有一个表的外键bigId关键这个表主键id,导致无法级联删除