【spring data jpa】使用spring data jpa 的删除操做,须要加注解@Modifying @Transactional 不然报错以下: No EntityMana...

使用spring data jpa 的删除操做,须要加注解@Modifying     @Transactional 不然报错以下: No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' callspring

 

场景以下:sql

在service中,先执行 delete 操做,再执行 save操做3d

报错以下:blog

 No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call事务

 

在service层加上事务注解,依旧会报错,并且在执行的sql中能够看到仅执行insert语句,没有执行delete语句rem

说明delete操做并无执行,因此在插入的时候,可能出现主键重复,惟一约束重复,报错的状况出现。it

 

解决方法:io

 

 

@Modifying做用:class

(1)能够经过自定义的 JPQL 完成 UPDATE 和 DELETE 操做。 注意: JPQL 不支持使用 INSERT; 
(2)在 @Query 注解中编写 JPQL 语句, 但必须使用 @Modifying 进行修饰. 以通知 SpringData, 这是一个 UPDATE 或 DELETE 操做 
(3)UPDATE 或 DELETE 操做须要使用事务,此时须要定义 Service 层,在 Service 层的方法上添加事务操做; 
(4)默认状况下, SpringData 的每一个方法上有事务, 但都是一个只读事务。 他们不能完成修改操做。thread

相关文章
相关标签/搜索