日期:2014-05-18  浏览次数:20763 次

关于hibernate的级联删除问题
配置文件代码
<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

------解决方案--------------------
你直接在数据库删除主表试试,八成是数据库外键设置级联限制不能删除
先删从表再删主表
------解决方案--------------------
Inverse和Cascade的比较

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

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