【问题标题】:Hibernate @SelectBeforeUpdate(true) and @DynamicUpdate(true) not working with session.merge休眠 @SelectBeforeUpdate(true) 和 @DynamicUpdate(true) 不适用于 session.merge
【发布时间】:2013-02-08 15:43:16
【问题描述】:

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

@SelectBeforeUpdate(true)@DynamicUpdate(true)

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

Hibernate docs中对merge方法的描述是:

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

的实例

有什么想法吗?

谢谢。

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    我能很快想到两件事:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-22
      • 2013-02-28
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多