2011-05-03 79 views
0

我有一个对象A与@onetoone对象B,所以对象A包含对对象B的ID的引用,我想删除数据库中的对象B,包括对象A的参考。我想知道最好的解决方案是什么。我希望将对象A上的属性b设置为null,当我想要执行删除时,我的对象将被分离。我已经尝试了几种解决方案,我已经看到了很多例外情况:-p使用休眠删除行和引用使用分离对象

+0

你能指定你尝试过什么吗?如果您的对象被分离,我假设您正在使用查询来删除这些实体。 – 2011-05-03 09:04:10

+0

我不使用查询吗?我希望我可以用Eric的回答来使用这些对象吗? – 2011-05-03 09:18:17

+0

你说实体是分离的。正如你在埃里克答案的评论中所写的那样,如果没有先附加它们,就没有办法修改它们。你可以用查询来做,而且速度更快(就性能而言)。 – 2011-05-03 09:39:40

回答

1

你试过类似的东西吗?

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

最适当的方式,在我看来,是先

  1. 设置为null属性,
  2. 然后删除你要删除的实体撇清这两个实体。
+0

我发现一个工作“解决方案”,通过检索对象A和B使用他们的ID,然后像你说的那样去做。尽管如此,5行代码来执行一个简单的任务不能是我想最好的解决方案... – 2011-05-03 09:15:36

+0

应该有一种方式来附加和更新在一个调用中,我认为你可以用update()来做到这一点,但也许merge()会做到这一点。基本上,正如Nobody先生所说的,在更新之前您需要附加实例。 – Eric 2011-05-03 12:37:44

0

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

+0

我想知道这是否有一个注释... – 2011-05-03 09:16:39