最近在写SSH整合时出现了 deleted object would be re-saved by cascade这个错误

我的Hibernate关系映射文件如下

<many-to-one name="dept" class="cn.pb.pojo.Dept" lazy="false" >
            <column name="DEPTNO" />
        </many-to-one>

<set name="emps" inverse="true" lazy="fasle" cascade="save-update,merge,delete">
            <key>
                <column name="DEPTNO" />
            </key>
            <one-to-many class="cn.pb.pojo.Emp" />
        </set>

然后通过百度找到了如下几种的解决方法

  1. 方法1 删除Set方的cascade
  2. 方法2 解决关联关系后,再删除
  3. many.getOne().getManys().remove(many);   //在所关联的一方的set中移走当前要删除的对象
  4. manyDao.delete(many);
  5. 方法3 在many-to-one方增加cascade 但值不能是none

以OneToMany为例

1、如果Many端存在于One端的集合中,直接删除Many,就会抛出delete object would be re-saved by cascade的异常

出现这种情况的原因是在一对多的一方没有让其延迟加载

<set name="emps" inverse="true" lazy="fasle" cascade="save-update,merge,delete">
            <key>
                <column name="DEPTNO" precision="2" scale="0" />
            </key>
            <one-to-many class="cn.pb.pojo.Emp" />
  </set>

解决方法:lazy属性设置为true,或者是在One端的集合中先删除Many端,然后再在Hibernate中删除Many端

注意:如果直接删除One端,由于主外键关系肯定会引发“Cannot delete or update a parent row:aforeign key constraint fails”的异常

若按照第三种方案,很显然在删除Many的一方之后,One的一方中的数据也会被删除,这样给数据的完整性带来的很大的隐患

而使用第一种方案在编写数据访问层的代码时需要手动的维护数据的完整性,显然降低了开发的效率

所以当遇到上述问题时,个人推荐使用第二种解决方案

Hibernate中ManyToOne删除Many的一方出现 deleted object would be re-saved by cascade相关推荐

  1. hibernate中many-to-one实例一

    可以发现,添加一个教师的同时指定一个学生,这种方式相当糟糕,合理的方式应该是在添加学生的时候指定教师.即在学生类里指 定教师对象,配置文件里配置成many-to-one. 单纯只使用many-to-o ...

  2. Spring Boot笔记-Hibernate中@ManyToOne及@OneToOne

    ER图如下: 这里只截取了部分,可见normalGoods表和user表中有关系.normalGoods和topGoods表有关系, 其中对应的表内容如下: normalGOods topGoods ...

  3. Repeater控件中添加删除修改按钮

    1: <asp:LinkButton ID="LinkButton1" runat="server" CommandArgument='<%#Eva ...

  4. hibernate 配置@ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY) 主导方问题删除问题。

    hibernate 配置@ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY)  ?? 多对一的关系 ,关系有一个主导方.主导方应该是one的 ...

  5. Hibernate的数据删除,更改

    其他未给出代码,请参考上一篇.... 一.数据的删除 方法1.从"多"的一方进行数据的删除 books.hbm.xml文件不变: <many-to-one name=&quo ...

  6. (J2EE学习笔记)解决Hibernate删除异常:deleted object would be re-saved by cascade

    我们在指定了数据库表的关联映射后,在删除其中一方的的时候,提示了以下异常:deleted object would be re-saved by cascade (remove deleted obj ...

  7. hibernate中一对一关系映射

    这篇文章讲述的是hibernate中一对一关系映射,如有错误或者不当之处还望各位大神批评指正. 一对一映射(外键关联) 目标 假设一个人对应养一只狗,一只狗只能由一个人来养,完成一对一相关操作. 类编 ...

  8. Hibernate中双向一对多关联关系

    前边我们讲过了单向多对一的关联关系,即在Java代码-hbm.xml配置文件-数据库表格中只是描述了一种类中多个对象可以对应一个其他类对象的关联关系.我们需要在一个类中含有另一个类的引用变量,然后在包 ...

  9. 在 Hibernate 中inverse的属性

    hibernate配置文件中有这么一个属性inverse,它是用来指定关联的控制方的. inverse属性默认是false,若为false,则关联由自己控制,若为true,则关联 由对方控制. 见例子 ...

最新文章

  1. 程序内存区域分配(五个段)--终于搞明白了
  2. 企业必须关注的IPv6网络安全25问
  3. WebLogic11g-常用运维操作
  4. ubuntu11.04下CUDA4.0的安装与配置
  5. 详解pager-taglib-2.0配合SSH分页
  6. GridView 中 Bind和Eval的区别详解
  7. Linux中修改环境变量及生效方法
  8. 心爱SEO博客开通了请光临百度
  9. 重要的Python数据分析库
  10. 链表的相关面试题(完整)(C语言)
  11. linux代码诊断有没有link,Linux下判断网线是否插入的代码
  12. CABAC 基础二-算术编码
  13. linux 安装vim 8.2(支持python3)
  14. 怎样使用secureCRT连接路由器
  15. 安装新操作系统需要注意的问题
  16. 计算机二级(Python)——02数值运算函数
  17. 计算机二级试题word,计算机二级word试题
  18. C++解决Hanks趣味问题
  19. 和鸿蒙有关的词,写鸿蒙的诗句诗词,关于鸿蒙的古诗大全,描写鸿蒙的诗全集...
  20. word 更新全局域

热门文章

  1. shell 字符串比较
  2. 网站服务器在卫星,云端服务器在卫星上吗
  3. 背景图通栏html,网页图片通栏实现的思路,谁能指导一下?_html/css_WEB-ITnose
  4. 量子前沿英雄谱|Marin Soljačić(马林·索尔季奇)
  5. clickhouse 数据TTL使用
  6. 《计算传播学导论》读书笔记:第七章 数据新闻
  7. oracle 12.2 迅雷下载,oracle下载-oracle数据库v12.2 最新版下载-6188手游网
  8. 《学习OpenCV3》第3章 了解OpenCV的数据类型
  9. qcc514x-qcc304x调试笔记
  10. opencv 边缘羽化,边缘过渡