使用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 的每個方法上有事務, 但都是一個只讀事務。 他們不能完成修改操作。
