2

我得到这样的代码:

def myObject = MyDomainClass.get(myId)
myObject.refresh()
myObject.myProperty = myValue
myObject.save(flush:true, failOnError:true)

尽管进行了获取和刷新,但执行保存时有时会收到“org.hibernate.StaleObjectStateException:行已被另一个事务更新或删除(或未保存的值映射不正确)”。

当我开始在多个会话中同时执行此方法时,就会发生这种情况。但是随后事务 1肯定完成了,再次为事务 2 执行此代码仍然失败!(我正在使用事务服务在事务由于乐观锁定而失败时重新执行事务,请参见此处)。

尽管我从数据库中获得了“新鲜”版本,但这怎么可能?

4

3 回答 3

1

该论坛主题提示您可能需要另一个 Hibernate Session。如果您为新事务尝试新会话怎么办,例如

Book.withNewSession{}
于 2010-12-08T10:07:51.110 回答
1

我至少找到了一种解决方法 - 回滚一个空事务:

myDomain.withTransaction { status -> 
  status.setRollbackOnly()
}
于 2010-12-08T10:56:28.170 回答
0

你应该使用

MyDomainClass.lock(myId)

代替

MyDomainClass.get(myId)
于 2015-05-06T11:45:22.540 回答