【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

相關文章
相關標籤/搜索