当前位置:首页 > JAVA > 正文内容

JPA报错Row was updated or deleted by another transaction的解决方法

高老师2年前 (2024-03-01)JAVA818
在 JPA 中,当多个事务同时尝试对同一行数据进行更新或删除时,如果其中一个事务已经提交了更改,而另一个事务仍在基于旧数据进行操作,JPA 会抛出“Row was updated or deleted by another transaction”异常。
这个异常是由 JPA 抛出的,而非数据库本身。JPA 在执行操作时,会使用乐观锁机制来检测并发访问冲突。乐观锁的工作原理是通过比较版本号来判断数据是否被其他事务修改。每次更新操作都会将版本号加一,并在提交时验证版本号是否与数据库中的版本号匹配。如果版本号不匹配,就说明数据已经被其他事务修改,从而导致异常的抛出,报错Row was updated or deleted by another transaction。
JPA会通过数据库字段 @Version 注解更新数据库,通过乐观锁执行SQL,因此如果报错这种信息则证明存在事务冲突,比如数据库的version是2,你传递的version是1,因此更新失败。建议是直接查询数据库现在的版本是多少再去更新数据。


扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/729.html

分享给朋友:

“JPA报错Row was updated or deleted by another transaction的解决方法” 的相关文章

Java不用编译直接执行

Java不用编译直接执行

public class test {     public static void main(String[] args) {     &...

java编译编码问题,java编译执行时编码问题

java编译编码问题,java编译执行时编码问题

public class test {     public static void main(String[] args) {     &...

java一个类可以有多个构造方法

java一个类可以有多个构造方法

java一个类可以有多个构造方法,根据传参类型和个数来匹配执行哪个构造方法。public class Member {     public Member(){      ...

java增强型for循环

java增强型for循环

Java5 引入了一种主要用于数组的增强型 for 循环,类似js中的for inpublic class Member {     public static void main(String[]&...

java正则表达式捕获组

java正则表达式捕获组

java正则表达式的捕获组捕获组可以将匹配到的结果根据正则中的括号进行分组,这里变量我加了$符,php转java的坏习惯,懒得改了,能跑就行// 匹配字符串 String $line = "gaojiufeng 1994! ok?...

java ArrayList添加元素,java ArrayList打印全部元素,java ArrayList 访问元素,java ArrayList 修改元素,java ArrayList 移除元素,

java ArrayList添加元素,java ArrayList打印全部元素,java ArrayList 访问元素,java ArrayList 修改元素,java ArrayList 移除元素,

定义变量格式: E为常用变量类型的包装类型ArrayList<E> objectName =new ArrayList<>();常用操作:// 创建ArrayList ArrayList<String> sites...