StaleObjectStateException vs OptimisticLockException

Day*_*Tex 9 concurrency hibernate exception optimistic-concurrency

当我的应用程序出现乐观并发问题时,我的应用程序中抛出StaleObjectStateException而不是OptimisticLockException(因为我读到我应该期待这个).无需发布代码,因为它是最基本的并发问题 - 时间戳列中的错误版本.

我怎么会得到OptimisticLockException,而不是另一个?

ger*_*tan 9

使用直接hibernate API时抛出StaleObjectStateException.如果您使用JPA样式的hibernate,则抛出OptimisticLockException.如果这让您感到困惑,请阅读:JPA和Hibernate有什么区别?

使用try catch块来捕获异常:

try {
  // your hibernate operation here
} catch (OptimisticLockException e) {
  // do something (eg: inform user update is conflicting)
}
Run Code Online (Sandbox Code Playgroud)

值得注意的是,由于其他事务在您有机会之前已更新(因此创建了更新版本)对象,因此会发生OptimisticLockException.在UI应用程序中,通常提示用户是否覆盖/丢弃/合并他/她的对象版本

  • 我知道如何捕获异常:)问题是这里抛出了一个不同的异常.正如我在文档和书籍中所读到的,在乐观并发的情况下应该抛出OptimisticLockException.我正在获取StaleObjectStateException.我想要另一个!:d (2认同)