您的位置:首页 > 理论基础 > 计算机网络

org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade 解决方案 (网络转载)

2014-10-27 16:07 363 查看
前提是配置了cascade=all,依然报这种错误,其实出现这个错误的大多数情况根本不是像网上的帖子所说的是什么级联删除的问题,而且hibernate session关于实体生命周期操作的原因,这里明确的是,问题不是出在删除这里,如果是单纯的删除操作,是不会出这个问题的,原因在于我们在删除这个对象之后,通过会指定跳转到查询这个对象一的一端的操作上,问题就出现在这里,如果采用osiv模式,删除,查询,整个过程都还没有session的flush和transaction的commit,那么我们本身删除了一个对象,没有反应在数据库中,也没有更新session反正在hibernate的session中,再查询它一的一端对象的时候,便又把它获取了出来,获取了一个已经删除的对象,所以这里发生了冲突,抛出了上面的异常,解决方法很简单,在删除操作中加两行代码:

session.delete(object);

session.flush();

session.evict(object);

这里需要注意的是,采用osvi模式,通常是希望整个请求响应过程不出现异常,才把数据反应在数据库中,但session.flush(),就已经把数据与数据库同步了,所以这里的逻辑应该仔细设计,比如应该把对象实体的删除操作放在整个逻辑的最后等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐