【问题标题】:OptimisticLockException using @Version vs ConcurrentModificationExceptionOptimisticLockException 使用 @Version 与 ConcurrentModificationException
【发布时间】:2019-05-29 04:08:18
【问题描述】:

我有一个实体:

@Entity
public class Book {

    @Version
    private Integer version;

}

在并发事务中,我有一个错误 OptimisticLockException,因为我使用了 @Version 属性。没有@Version 我有一个错误: ConcurrentModificationException。

OptimisticLockException 和 ConcurrentModificationException 有什么区别?

【问题讨论】:

  • 您从java.util 包中获得ConcurrentModificationException
  • @PiotrPodraza 是的,如果我不使用版本注释,它来自 java.util 包。另一方面,如果我使用版本注释乐观锁启用,我有一个 OptimisticLockException。因此,当我使用版本和不使用版本注释时,当两个事务修改实体时,相同的示例会引发不同的错误。

标签: hibernate jpa version


【解决方案1】:

OptimisticLockExceptionConcurrentModificationException(我假设它来自 java.util)是两个完全不同的异常,不会互换抛出。

第一个,顾名思义,与乐观锁定有关,这基本上意味着其他事务已提交对您尝试更新的实体的更改。

如果不允许同时修改对象,则会引发第二次修改。例如,当您尝试从正在迭代的集合中删除元素时。我无法从您提供的 sn-p 中推断出在您的情况下究竟是什么触发了此异常,但它通常与乐观锁定和 JPA 无关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    相关资源
    最近更新 更多