zoukankan      html  css  js  c++  java
  • HIbernate 级联删除

    在一对多的情形下如 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 这样失去了意义

    方法3 在many-to-one方增加cascade 但值不能是none ,这样在对多的一方Screen做一些操作的时候可能影响到一方(不可取)

    方法2 解决关联关系后,再删除(从一方取出多方后删除,并将多方的外键设为null,在对多方删除 )

        onside.getManys().remove(thisMany);   //在所关联的一方的set中移走当前要删除的对象
        thisMany.setOne(null);                         //设置所对应的一方为空,解除它们之间的关系
        manyDao.delete(thisMany);

    其中方法2可取;

  • 相关阅读:
    bzoj3473 字符串
    洛谷P4070 生成魔咒
    洛谷P3975 弦论
    AT1219 歴史の研究
    课上讲的几个新的技巧
    索引与视图(转载)
    oracle中的分支与循环语句
    Oracle to_date()函数的用法《转载》
    自定义函数的存储过程的区别
    UNION 和 UNION ALL 操作符
  • 原文地址:https://www.cnblogs.com/Wen-yu-jing/p/java.html
Copyright © 2011-2022 走看看