码迷,mamicode.com
首页 > Web开发 > 详细

HIbernate 级联删除

时间:2014-12-17 18:02:30      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:style   sp   on   bs   ad   as   size   nbsp   br   

在一对多的情形下如 Cinema - > Screen;

1、正常在不设置级联(casCade)的情况下 删除一的一方(Cinema)会报外键关联 异常 Screen 中包含Cinema的外键;

这个时候可以先取出Cinema中的所有Screen集合后在删除所有的Screen, 完毕后在删除 Cinema 这样就ok;

2、但是在设置了级联的情形下,在一的一方Cinema中设置了CascadeType.ALL后(这样在保存一个Cinema的时候方便保存所有的Screen),在

按照上面的方法删除多的一方Screen就会报错了 deleted object would be re-saved by cascade 

解决办法:

方法1 删除Set方的cascade:也就是取消Cinema中设置的CascadeType.ALL 这样失去了意义
方法2 解决关联关系后,再删除(从一方取出多方后删除,并将多方的外键设为null,在对多方删除 )

    onside.getManys().remove(thisMany);   //在所关联的一方的set中移走当前要删除的对象
    thisMany.setOne(null);                          //设置所对应的一方为空,解除它们之间的关系
    manyDao.delete(thisMany);
方法3 在many-to-one方增加cascade 但值不能是none ,这样在对多的一方Screen做一些操作的时候可能影响到一方(不可取)

其中方法2可取:

HIbernate 级联删除

标签:style   sp   on   bs   ad   as   size   nbsp   br   

原文地址:http://www.cnblogs.com/Wen-yu-jing/p/java.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!