首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >刷新对象后的StaleObjectStateException

刷新对象后的StaleObjectStateException
EN

Stack Overflow用户
提问于 2012-01-20 21:03:01
回答 1查看 1.4K关注 0票数 3

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

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

session.refresh(<staleObject>)

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

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

注意:对于我们的桌面(RCP)应用程序,我们对每个视图实现使用一个会话

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-23 22:43:02

正如您已经提到的,它是一个长时间运行的会话,根据refresh()方法的hibernate doc

从底层数据库重新读取给定实例的状态。使用它来实现跨越许多业务任务的长时间运行的会话是不可取的。然而,这种方法在某些特殊情况下是有用的。例如,当数据库触发器在执行直接SQL之后插入或更新时改变对象状态(例如,在插入Blob或Clob之后的同一会话中进行批量更新

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

我不知道你有任何强制使用长时间运行会话的习惯,这只是一个建议。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8941859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档