Hibernate StaleStateObjectException可以从单个线程抛出吗?

Hibernate StaleStateObjectException可以从单个线程抛出吗?,hibernate,grails,Hibernate,Grails,我们正在使用Grails和Hibernate。我们在日志中得到一个org.hibernate.StaleObjectStateException。我认为这可能是因为乐观锁失败。好的但是,我想确保这永远不会发生在同一线程的多个更新中。我的意思是永远不会。是否存在对同一hibernate实体进行多个更新但都来自同一线程的情况会导致此异常 谢谢,我没有尝试,但我希望此代码会出现以下错误: Foo foo1 = session.get(Foo.class, 1); Foo foo2 = sessio

我们正在使用Grails和Hibernate。我们在日志中得到一个
org.hibernate.StaleObjectStateException
。我认为这可能是因为乐观锁失败。好的但是,我想确保这永远不会发生在同一线程的多个更新中。我的意思是永远不会。是否存在对同一hibernate实体进行多个更新但都来自同一线程的情况会导致此异常


谢谢,

我没有尝试,但我希望此代码会出现以下错误:

 Foo foo1 = session.get(Foo.class, 1);
 Foo foo2 = session.get(Foo.class, 1); // same ID

 foo1.setBar(1);
 foo2.setBar(2);

 session.saveOrUpdate(foo1);
 session.saveOrUpdate(foo2); // Should throw an error

例如,当您拥有在相同实体上工作的复杂助手对象时,可能会发生这种情况。

我认为Hibernate确保了当您从同一会话多次获得相同id时,您可以获得相同的id(
=
)对象返回?@Aoron Digulla如何在grails中获得hibernate会话?@IanRoberts:应该是这样,但我不确定这取决于什么以及它有多聪明。@Break:对我的答案持保留态度。其基本思想是,获取同一实体的两个副本,分别修改这两个副本,然后尝试保存它们。在我的示例中,
session.merge()。