错误:删除然后在单个事务中使用JPA插入

时间:2013-12-02 04:56:57

标签: 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:批量更新从update [0]返回意外的行数;实际行数:0;预期:1

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

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

1 个答案:

答案 0 :(得分:1)

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

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