解决hibernate 删除异常:deleted object would be re-saved by cascade

原创 2011年01月10日 18:24:00

在hibernate 删除关联时会出现eleted object would be re-saved by cascade (remove deleted object from associations)的异常,结合别人的和自己的经验通常有三种解决的方案:

方法1 删除Set方的cascade:
方法2 解决关联关系后,再删除

    onside.getManys().remove(thisMany);   //在所关联的一方的set中移走当前要删除的对象
    thisMany.setOne(null);                          //设置所对应的一方为空,解除它们之间的关系
    manyDao.delete(thisMany);
方法3 在many-to-one方增加cascade 但值不能是none
 


主要讲讲要点(以OneToMany为例):

1.如果Many端存在于One端的集合中,直接删除Many,就会抛出"deleted object would be re-saved by cascade"的异常,解决办法是在One端的集合中先删除Many端(先把他们之间的联系割断),然后再在Hibernate中删除Many端。
但在JDBC下直接删除Many端是可以的。

2.如果直接删除One端:
   A.如果One端中没有设置Cascade为delete或者all,就会抛出“Cannot delete or update a parent row: a foreign key constraint fails”的异常。在JDBC下也是不行的(在建表时设置 ON DELETE CASCADE除外),因为Hibernate只是把JDBC下的异常封装而已。
   B.如果One端中设置Cascade为delete或者all,删除的时候就会把所有Many端都删除。

相关文章推荐

解决hibernate 删除异常: deleted object would be re-saved by cascade

问题: 在hibernate中配置one to many的关联关系,级联设置成cascade=‘all’,删除one的时候many会被级联删除,而删除many的时候出现了如下异常 org.sprin...
  • lkl713
  • lkl713
  • 2014年03月31日 10:41
  • 2382

Hibernate:deleted object would be re-saved by cascade (remove deleted object from associations): []

Hibernate多表关联的时候的异常:deleted object would be re-saved by cascade (remove deleted object from associat...

Git-命令行-拯救“Your local changes to the following files would be overwritten by checkout”

前言有些时候,当我们使用 git checkout 命令切换分支的时候,有时会切换失败,然后出现以下的提示信息:提示信息说的很清楚, 当前分支有未跟踪的文件,checkout 命令会覆盖它们,请缓...

error: The following untracked working tree files would be overwritten by merge

使用git pull 时报错了:error: Your local changes to the following files would be overwritten by merge:...

Error pulling origin: error: The following untracked working tree files would be overwritten by...

git在pull时,出现这种错误的时候,可能很多人进进行stash,相关stash的请看:Error pulling origin: error: Your local changes to the...

git checkout : You have local changes cannot switch branches&Entry would be overwritten by mege

摘要:分支切换在git的使用中可谓是最重要的部分之一,而git checkout还经常被用于回滚当前工作目录——当然,也被用来做 分支切换。因此,这是出错率极高的命令。本文主要为你解析git chec...

git 切换到develop分支时 提示error: The following untracked working tree files would be overwritten by check

最近做个项目, 做了一半,发现项目文件位置出错啦,需要将现做的项目文件迁移到另一个目录下,当同事迁移完后,我准备到指定目录下拉取文件,右击打开git Bash here ,输入在master分支...

javax.faces.application.ViewExpiredException与no saved view state could be found的解决方案

Caused by: javax.faces.application.ViewExpiredException: /UserManage/UserOpHist.facesNo saved view s...

map遍历删除异常:ConcurrentModificationException

1. map集合单个删除此时,一般都不会出问题,直接 remove(key) 2. map集合遍历删除多个出现 ConcurrentModificationException...

[git] warning: LF will be replaced by CRLF | fatal: CRLF would be replaced by LF

遇到这两个错误,是因为Git的换行符检查功能。 core.safecrlf Git提供了一个换行符检查功能(core.safecrlf),可以在提交时检查文件是否混用了不同...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解决hibernate 删除异常:deleted object would be re-saved by cascade
举报原因:
原因补充:

(最多只允许输入30个字)