【问题标题】:Bypassing DELETE_ORPHANS in a transaction when moving objects from one parent to another, hibernate将对象从一个父级移动到另一个父级时,在事务中绕过 DELETE_ORPHANS,休眠
【发布时间】:2009-06-18 14:36:48
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: sql hibernate merge


    【解决方案1】:

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

    来自 hibernate 团队的Christian 谈到 DELETE_ORPHANS 是一种 hack,可确保 hibernate 在从对象中删除关联对象时可以删除。他说要谨慎使用它。

    如果可以的话,基本上不要使用 delete_orphans。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-06
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 2020-07-13
      • 2021-05-30
      相关资源
      最近更新 更多