【spring data jpa】使用spring data jpa 的刪除操作,需要加注解@Modifying @Transactional 否則報錯如下: No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call


使用spring data jpa 的刪除操作,需要加注解@Modifying     @Transactional 否則報錯如下: No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call

 

場景如下:

在service中,先執行 delete 操作,再執行 save操作

報錯如下:

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

 

在service層加上事務注解,依舊會報錯,而且在執行的sql中可以看到僅執行insert語句,沒有執行delete語句

說明delete操作並沒有執行,所以在插入的時候,可能出現主鍵重復,唯一約束重復,報錯的情況出現。

 

解決方法:

 

 

@Modifying作用:

(1)可以通過自定義的 JPQL 完成 UPDATE 和 DELETE 操作。 注意: JPQL 不支持使用 INSERT; 
(2)在 @Query 注解中編寫 JPQL 語句, 但必須使用 @Modifying 進行修飾. 以通知 SpringData, 這是一個 UPDATE 或 DELETE 操作 
(3)UPDATE 或 DELETE 操作需要使用事務,此時需要定義 Service 層,在 Service 層的方法上添加事務操作; 
(4)默認情況下, SpringData 的每個方法上有事務, 但都是一個只讀事務。 他們不能完成修改操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM