gpt4 book ai didi

java - 从 StaleObjectStateException 中恢复

转载 作者:行者123 更新时间:2023-12-01 15:19:38 26 4
gpt4 key购买 nike

我有一种情况,一个线程可以从数据库检索一个对象,并编辑它,当刷新它时,我得到一个 StaleObjectStateException 因为与此同时另一个线程编辑了同一个对象(我正在使用乐观锁定)。我可以明白为什么会发生这种情况,但我无法改变这种行为。

所以我尝试做的是再次从数据库检索对象并在最新版本上重新应用更改,但是在更改之前进行检索时我会得到另一个 StaleObjectStateException什么,这是为什么?

try{
songs = nextSongGroup.getSongs(session);
modifySongs(songs);
session.flush();
}
catch(StaleObjectStateException sobe){
songs = nextSongGroup.getSongs(session);
modifySongs(songs);
}

最佳答案

如果您遇到此异常,那就太晚了。您需要扔掉该 session 并获得一个新的。同一 session 上的任何查询都会导致相同的异常。

理论上调用em.clear();并重新运行相同的查询可能会有所帮助。不过我从来没有尝试过。

对我来说,我通常会向用户展示一个 Oops 页面,其中有一个重试按钮,可以在干净的 session 中再次运行他的请求。

关于java - 从 StaleObjectStateException 中恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11137173/

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