将对象从一个父节点移动到另一个父节点时,在事务中绕过DELETE_ORPHANS,休眠

时间:2009-06-18 14:36:49

标签: sql hibernate merge

我正在使用Spring 2.5.6和Hibernate Annotations的组合。我有三个对象(表格或w / e)正在考虑中:客户,地址,订单。 Customer为地址设置了Cascade DELETE_ORPHANS属性。

我正在做的是客户合并,我将所有地址和订单从一个客户移动到另一个客户,然后在旧客户上设置一个禁用位。我这样做是通过从CustB中删除地址并将它们添加到CustA。然后我用.update(custA)保存CustA,地址和订单适当移动,但是当我用禁用位更新custB时,它会删除我移动的地址!

当我注释掉DELETE_ORPHANS时,它可以正常工作。

如何阻止DELETE_ORPHANS删除已移动的地址?我不应该将它们从custB中删除,只是更改他们的客户参考?如果我在一个事务中执行所有操作,在每个操作之间分离对象,它们是否会在启用DELETE_ORPHAN的情况下正确更新?

1 个答案:

答案 0 :(得分:0)

我在hibernate的论坛上发现了这篇文章:https://forum.hibernate.org/viewtopic.php?f=1&t=961777&start=0

来自hibernate团队的Christian谈论DELETE_ORPHANS作为一个黑客,确保hibernate,当关联从一个对象中删除时,可以删除。他说要谨慎使用它。

基本上,如果可以提供帮助,请不要使用delete_orphans。

如果您决定使用它,则必须执行额外的查询以删除条目,然后使用附加到新父对象的新标识符重新创建它们。