刷新对象后出现StaleObjectStateException



当我尝试提交会话,而另一个用户也更改了同一对象时,Hibernate会抛出一个StaleObjectStateException

当我试图从该异常中恢复时,我调用:

session.refresh(<staleObject>)

然后我再次调用以前失败的提交。但是staleObjectStateException再次出现在同一对象上。即使没有其他用户进行更改,我也验证了对象的版本号与我们数据库中的版本号相同。

有人知道可能出了什么问题吗?对于如何在不关闭和打开新会话的情况下优雅地处理异常,有人有更好的想法吗?

注意:我们为桌面(RCP)应用程序

使用"每个视图一个会话"实现

正如您所提到的,根据refresh()方法的hibernate文档,是一个长时间运行的会话

从基础数据库中重新读取给定实例的状态。不建议使用它来实现那些跨多个业务任务。然而,这种方法在某些情况下是有用的特殊情况。例如数据库触发器在插入或更新时更改对象状态在同一会话中执行直接SQL(例如大规模更新)之后插入Blob或Clob 后

我建议您改变在整个应用程序生命周期中使用单个会话的策略,使用会话但事务意味着只有在需要与数据库交互时才打开会话,并且一旦完成,就关闭会话。

我不知道你有任何使用长时间训练的冲动,这只是一个建议。

相关内容

  • 没有找到相关文章

最新更新