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

标签 mysql hibernate jpa

使用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/

相关文章:

php - 如何强制浏览器读取更新的数据库信息?

javascript - 如何在 php 表中添加选项标签并将选定的值传递给 mysql db 而无需提交按钮?

java - 如何使用 Spring Data JPA 查询 map 值?

java - JPA 使用 Map<ID, Entity> 而不是 List<Entity>

mysql - 是否有指向 sakila 演示网站的永久链接?

mysql - 选择包含计算字段的查询,该计算字段使用具有多个条件的子查询

java - 在 Spring MVC 中使用 Ajax 和 SimpleFormController

java - JPA 如何从 OneToMany 关系中的对象的 Arraylist 获取属性

mysql - Spring MVC 获取请求复合键

java - Jpa:在哪里放置 toString() 自定义方法?