我有一个对象A与@onetoone对象B,所以对象A包含对对象B的ID的引用,我想删除数据库中的对象B,包括对象A的参考。我想知道最好的解决方案是什么。我希望将对象A上的属性b设置为null,当我想要执行删除时,我的对象将被分离。我已经尝试了几种解决方案,我已经看到了很多例外情况:-p使用休眠删除行和引用使用分离对象
回答
你试过类似的东西吗?
ojbecttA.setB(null);
session.update(objectA);
session.delete(objectB);
最适当的方式,在我看来,是先
- 设置为null属性,
- 然后删除你要删除的实体撇清这两个实体。
我发现一个工作“解决方案”,通过检索对象A和B使用他们的ID,然后像你说的那样去做。尽管如此,5行代码来执行一个简单的任务不能是我想最好的解决方案... – 2011-05-03 09:15:36
应该有一种方式来附加和更新在一个调用中,我认为你可以用update()来做到这一点,但也许merge()会做到这一点。基本上,正如Nobody先生所说的,在更新之前您需要附加实例。 – Eric 2011-05-03 12:37:44
除了基于Hibernate的解决方案之外,您还可以通过声明外键为ON DELETE SET NULL
来指示数据库自动执行此操作。
我想知道这是否有一个注释... – 2011-05-03 09:16:39
你能指定你尝试过什么吗?如果您的对象被分离,我假设您正在使用查询来删除这些实体。 – 2011-05-03 09:04:10
我不使用查询吗?我希望我可以用Eric的回答来使用这些对象吗? – 2011-05-03 09:18:17
你说实体是分离的。正如你在埃里克答案的评论中所写的那样,如果没有先附加它们,就没有办法修改它们。你可以用查询来做,而且速度更快(就性能而言)。 – 2011-05-03 09:39:40