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可取;

  • 相关阅读:
    python对打印出中文乱码问题的解决方案
    git常用操作
    如何创建git开发环境
    对自然界的三种花进行分类
    创建第一个简单的AI分类器
    使用TensorFlow创建第变量定义和运行方式
    MySQL的left,substr,instr截取字符串函数使用实例
    构建之法阅读笔记05
    找水王2
    第十二周学习进度
  • 原文地址:https://www.cnblogs.com/Wen-yu-jing/p/java.html
Copyright © 2011-2022 走看看