当我的应用程序出现乐观的并发问题时,StaleObjectStateException将被抛到我的应用程序中,而不是OptimisticLockException (正如我所看到的,我应该预料到这一次)。不需要发布代码,因为它是最基本的并发问题--时间戳列中错误的版本。
我怎么能得到OptimisticLockException,而不是另一个呢?
发布于 2013-08-11 22:52:04
当您使用直接的hibernate API时会引发StaleObjectStateException。如果使用JPA样式hibernate,则会引发OptimisticLockException。如果这让你感到困惑,请阅读:What's the difference between JPA and Hibernate?
使用try catch块捕获异常:
try {
// your hibernate operation here
} catch (OptimisticLockException e) {
// do something (eg: inform user update is conflicting)
}值得注意的是,由于其他事务在您有机会之前更新了对象(因此创建了更新版本),所以出现了OptimisticLockException。在UI应用程序中,通常会提示用户是否覆盖/丢弃/合并其对象的版本。
发布于 2014-02-03 07:59:24
在我对Hibernate 3.5.2 (现在有点老了)的分析中,我发现它们有时抛出OptimisticLockException,有时抛出StaleObjectStateException。批处理操作甚至会抛出StaleStateException,这是StaleObjectStateException的一个超类,但是没有实体实例。
在我看来,这是一个未完成的重构,您可能需要抓住两者,并以相同的方式对两者作出反应。
https://stackoverflow.com/questions/18176932
复制相似问题