2011-05-26 40 views
1

想象一下,我有一个被许多其他实体引用的hibernate实体。现在我创建一个新的实体,并且我希望新实体能够吸引旧实体的位置,所以它被别人引用代替旧实体。在休眠状态下更新对实体的引用的最佳方式

这样做的最好方法是什么?

+0

试图解释为什么你需要做到这一点?你的意思是新的新实例? – Eduard 2011-05-26 08:13:21

+0

我想将一些实体标记为已删除,因此它们不会完全消失。我只需要插入一个新的实体来代替旧的,现在已经过时的实体。 – Jarek 2011-05-26 10:23:17

回答

0

我认为你应该深拷贝(这是你永远不会这样做的原始实体)将state属性设置为删除并使得hibernate更新实体。然后对复制的实体进行任何修改并使hibernate保存该实体。结果将是原始实体将被删除,复制将被添加为新的原始参考。

+0

有一个像uther.lightbringer这样的活动/非活动策略是很常见的,因为各种原因,所有实体都保留在表中。甚至还有一派思想不应该删除。这对于时间相关的报告和一些审计方法尤其重要。 – 2011-05-26 22:10:26

+0

编辑我的答案。我忽视了他想保留原始实体的事实。 – Eduard 2011-05-27 06:51:50

0

最简单的方法是在参考实体使用更新语句,例如:

update ReferringEntity re set re.entity.id = :newId where re.entity.id = :oldId