hibernate - OptimisticLockException 使用 @Version 与 ConcurrentModificationException
问题描述
我有一个实体:
@Entity
public class Book {
@Version
private Integer version;
}
在并发事务中,我有一个错误 OptimisticLockException,因为我使用了 @Version 属性。没有@Version 我有一个错误:ConcurrentModificationException。
OptimisticLockException 和 ConcurrentModificationException 有什么区别?
解决方案
OptimisticLockException
和ConcurrentModificationException
(我假设它来自java.util
)是两个完全不同的异常,并且不会互换地抛出。
第一个,顾名思义,与乐观锁定有关,这基本上意味着其他事务已向您尝试更新的实体提交更改。
第二个是在不允许同时修改对象时引发这种修改。例如,当您尝试从您正在迭代的集合中删除一个元素时。我无法从您提供的片段中推断出在您的情况下究竟是什么触发了此异常,但它通常与乐观锁定和 JPA 无关。
推荐阅读
- python - 填充数组的有效方法
- javascript - 如何使用条件道具接口定义 React 组件?
- go - 在终端中工作的命令不适用于 go exec.Command
- javascript - 打字稿数字或数字枚举类型?
- c++ - 寻找数字的下一个回文,得到 SIGABRT 错误
- laravel - laarvel 项目部署到 cpanel 的问题
- python - 如何创建没有用户名但使用电子邮件和 @classethod 的 AbstractUser?
- shell - 跳过输入参数的第一行
- tags - 如何在文档模块的 Odoo 13 中隐藏“标签”?并且仍在使用它
- php - PhpStorm:有没有办法使用内联 PHPDoc 注释在 return 语句上强制类型?