首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

关于hibernate的级联删除有关问题

2013-09-05 
关于hibernate的级联删除问题配置文件代码class namecom.et.pojo.BigType tabletb_bigtypeid nam

关于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的问题

热点排行