2

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

@SelectBeforeUpdate(true)@DynamicUpdate(true)

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

Hibernate 文档中对 merge 方法的描述是:

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

有什么想法有什么问题吗?

谢谢。

4

1 回答 1

0

我能很快想到两件事:

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

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

于 2013-03-23T15:18:12.293 回答