Hibernate 一对多级联更新(更新,删除多方数据)的错误解决

本文探讨了在处理数据库级联关系时遇到的常见错误,包括deletedobjectwouldbere-savedbycascade与Acollectionwithcascade的问题,并提供了解决方案,如使用cascade="all-delete-orphan"及通过Session.merge()方法进行实体合并。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我在处理数据库的级联关系时,老是碰到题目中的两个异常:

deleted object would be re-saved by cascade

A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance

这两个问题,删除cascade这一项会解决一个问题但是也带来了另一个问题,删除cascade以后呢,就相反,总有问题。

而修改明细后保存报:

a different object with the same identifier value was already associated with the session

而解决方法是:

1.在One方设置为cascade="all-delete-orphan" , 

2.修改保存时(同时修改了MANY方),一般都需要将数据库中的数据先getById取出,然后进行赋值。

3.其Set中的Many方不能通过setXXX的方式设置值。因为这样在后面merge的时候就不会有更新语句。需要通过将getById取出的Set进行clear(),然后将前台传入的Many数据一一通过getXXX().add()的方法加入。

4.,对实体进行MERGE,Session.merge()。这样Many方有修改或删除都可以正常进行。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值