我在处理数据库的级联关系时,老是碰到题目中的两个异常:
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方有修改或删除都可以正常进行。