2013-02-08 198 views
1

我正在使用Hibernate 4.1.7.Final并尝试使用session.merge(entity)方法更新对象。实体标注有:Hibernate @SelectBeforeUpdate(true)和@DynamicUpdate(true)不能与session.merge一起使用

@SelectBeforeUpdate(true)@DynamicUpdate(true)

然而,我发现,合并方法会覆盖原有的非空字段(在先前坚持实体)与实体空值被合并 - 这是我不想要。我认为@DynamicUpdate只会更新非空值。

在Hibernate文档的合并方法的描述是:

复制给定对象的状态到具有 相同标识符持久对象。如果当前没有与会话关联的持久实例 ,它将被加载。返回持久的 实例。如果给定实例未保存,请保存其副本并将其作为新持久实例返回 。给定的实例不会成为与会话关联的 。如果关联映射为级联=“合并”,则该操作级联到关联的 实例

任何想法有什么问题?

谢谢。

回答

0

两件事是我能想到的迅速:

  1. 据(如果你使用JPA @Version注释)到Hibernate文档,版本/时间戳列应作为以一个乐观锁定的策略会议。 merge()正确处理对分离实例所做的修改。确保使用此策略。

  2. @SelectBeforeUpdate和@DynamicUpdate不可继承,因此请确保注释了正确的实体。

相关问题