首页 > 解决方案 > OptimisticLockException 使用 @Version 与 ConcurrentModificationException

问题描述

我有一个实体:

@Entity
public class Book {

    @Version
    private Integer version;

}

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

OptimisticLockException 和 ConcurrentModificationException 有什么区别?

标签: hibernatejpaversion

解决方案


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

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

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


推荐阅读