Hibernate @SelectBeforeUpdate(true)和@DynamicUpdate(true)不能与session.merge一起使用

时间:2013-02-08 15:43:16

标签: hibernate

我正在使用Hibernate 4.1.7.Final并尝试使用session.merge(entity)方法更新对象。该实体注释为:

@SelectBeforeUpdate(true)@DynamicUpdate(true)

但是,我发现merge方法会覆盖原始的非空字段(在之前的持久化实体中),并且实体被合并为空值 - 这是我不想要的。我以为@DynamicUpdate只会更新非空值。

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

  

使用。将给定对象的状态复制到持久对象上   相同的标识符如果当前没有持久化实例   与会话相关联,它将被加载。返回持久性   实例。如果给定实例未保存,请保存副本并返回   它作为一个新的持久化实例。给定的实例不会成为   与会话相关联。此操作级联到相关联   如果关联使用cascade =“merge”

进行映射,则为实例

任何想法有什么不对?

感谢。

1 个答案:

答案 0 :(得分:0)

我能想到的两件事:

  1. 根据Hibernate doc,版本/时间戳列(如果使用JPA,则为@Version注释)应该用作乐观锁定策略,以便Session.merge()正确处理对分离实例的修改。请务必使用此策略。

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