gpt4 book ai didi

mysql - 错误: Delete then insert using JPA in single transaction

转载 作者:行者123 更新时间:2023-11-29 13:24:35 25 4
gpt4 key购买 nike

使用JPA和mysql,我想编写使用@Transaction注释在单个事务中删除和插入表的程序

我的代码是这样的

 //Delete 
entityManager.createNamedQuery( "DELETE_QUERY" ).setParameter( "userId", userId ).executeUpdate();

entityManager.flush();


//Insert

User user = new User();
user.setUserId(122);
user.setPassword("test");

entityManager.merge( user );
entityManager.flush();

显示删除查询。然后更新查询在这里运行...然后它抛出下面提到的错误

............

javax.persistence.OptimisticLockException:org.hibernate.StaleStateException:批量更新从更新[0]返回意外的行计数;实际行数:0;预期:1

............

原因:org.hibernate.StaleStateException:批量更新从更新 [0] 返回意外的行计数;实际行数:0;预计:1........................org.springframework.transaction.TransactionSystemException:无法提交JPA事务;嵌套异常是 javax.persistence.RollbackException:事务标记为 rollbackOnly

最佳答案

您的 User 实体中有一个用 @Version 注释的字段,该字段正是用于乐观锁定,确保当您更新用户时,您在用户中传递相同的版本对象作为存储在数据库中的对象。

但你不是,因为你正在从头开始创建一个已经存在于数据库中的用户,其版本字段具有默认值。所以你会得到这个异常。

关于mysql - 错误: Delete then insert using JPA in single transaction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20321144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com