【问题标题】:Delete row and reference using detached objects with Hibernate使用带有 Hibernate 的分离对象删除行和引用
【发布时间】:2011-05-03 08:37:22
【问题描述】:

我有一个带有@onetoone 到对象 B 的对象 A,所以对象 A 包含对对象 B 的 id 的引用,我想删除数据库中的对象 B,包括对对象 A 的引用。我想知道是什么最合适的解决方案。我希望将对象 A 上的属性 b 设置为 null,我的对象在我想要执行删除的那一刻被分离。我尝试了几种解决方案,并且看到了很多例外情况:-p

【问题讨论】:

  • 你能具体说明你尝试了什么吗?如果您的对象已分离,我想您正在使用查询来删除这些实体。
  • 我没有使用查询,是吗?我希望我可以使用这些对象做类似 Eric 的回答?
  • 你说实体是分离的。正如您在 Eric answer 的评论中所写,如果不先附加它们,就无法修改它们。您可以通过查询来做到这一点,而且速度更快(就性能而言)。

标签: java hibernate jpa


【解决方案1】:

你尝试过这样的事情吗?

ojbecttA.setB(null);
session.update(objectA);
session.delete(objectB);

在我看来,最合适的方法是先

  1. 通过将属性设置为 null 来解除两个实体的关联,
  2. 然后删除您要删除的实体。

【讨论】:

  • 我找到了一个可行的“解决方案”,方法是使用他们的 id 检索对象 A 和 B,然后像你说的那样做。尽管如此,我认为执行一项简单任务的 5 行代码并不是最好的解决方案……
  • 应该有一种方法可以在一次调用中附加和更新,我认为您可以使用 update() 来完成,但也许 merge() 可以做到。从根本上说,正如没人说的那样,您确实需要在更新之前附加实例。
【解决方案2】:

除了基于 Hibernate 的解决方案之外,您还可以通过将外键声明为 ON DELETE SET NULL 来指示数据库自动执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多