gpt4 book ai didi

java - 刷新对象后出现 StaleObjectStateException

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:14:37 26 4
gpt4 key购买 nike

当我尝试提交我的 session 时,另一个用户也更改了同一个对象,然后 Hibernate 抛出一个 StaleObjectStateException .

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

session.refresh(<staleObject>)

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

谁知道哪里出了问题?有没有人知道如何在不关闭和打开新 session 的情况下优雅地处理异常?

注意:我们为我们的桌面 (RCP) 应用程序使用单个 session 的每个 View 实现

最佳答案

正如您所提到的,它是一个长时间运行的 session ,根据 hibernate doc对于 refresh() 方法,

Re-read the state of the given instance from the underlying database. It is inadvisable to use this to implement long-running sessions that span many business tasks. This method is, however, useful in certain special circumstances. For example where a database trigger alters the object state upon insert or update after executing direct SQL (eg. a mass update) in the same session after inserting a Blob or Clob

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

我不知道您对使用长时间运行的 session 有任何强制症,这只是一个建议。

关于java - 刷新对象后出现 StaleObjectStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8941859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com