【问题标题】:What does mean Hibernate's "unsaved-value mapping was incorrect"?Hibernate 的“未保存值映射不正确”是什么意思?
【发布时间】:2014-09-09 17:50:45
【问题描述】:

有一个著名的例外:

org.hibernate.StaleObjectStateException: 行被更新或删除 另一笔交易(或未保存的值映射不正确):[my.Entity#123456]

当“行被另一个事务更新或删除”时,这是一个非常熟悉的情况。

但是另一种可能性是什么意思 - “未保存的值映射不正确”?以及如何故意重现这种情况?

Grails 2.2.0

【问题讨论】:

    标签: hibernate grails-orm


    【解决方案1】:

    有关未保存值的说明,请参阅http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/mapping.html#mapping-declaration-id

    未保存的值(可选 - 默认为“合理”值):一个 指示实例是新的标识符属性值 实例化(未保存),将其与分离的实例区分开来 在上一个会话中保存或加载。

    Hibernate 在极少数情况下需要这个,当 saveOrUpdate() 无法确定实体是新的还是分离的。

    如果一个实体通过您的未保存值确定为分离的,但它是新的,那么 hibernate 无法比较版本号(因为该实体在数据库中不存在)。但是 Hibernate 无法知道您的未保存值映射是否正确,或者该实体已在另一个事务中被删除。这在 org.hibernate.StaleStateException 中也有描述:

    版本号或时间戳检查失败时抛出,表示 会话包含陈旧数据(使用长事务时 带版本控制)。如果我们尝试删除或更新一行 不存在。

    【讨论】:

      猜你喜欢
      • 2018-06-29
      • 2019-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      • 2010-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多