Spring-data-jpa 的@modifying注解


在項目的進行中需要通過 @Modifying 注解完成修改操作(注意:不支持新增)

1.之前有一個業務需要先查詢一個結果集,然后將滿足結果集中某個條件的另外一張表中的字段做一個屬性值的更改,這個更改可能是多個的

代碼如下

 

 

2.SQL語句如下

 

3.但是執行的過程中,控制台報錯,如下

 

 Can not issue data manipulation statements with executeQuery().

 

4.后來發現沒有添加  @Modifying注解

 

 

5.聊一聊@Modifying注解的實際使用

 

例如一下測試

@Modifying @Query("update Person set email = :email where lastName =:lastName")

void updatePersonEmailByLastName(@Param("lastName")String lastName,@Param("email")String email);

 

執行報錯,異常如下,

關鍵看這行 Caused by: javax.persistence.TransactionRequiredException: Executing an update/delete query,說明我們缺少事務配置。

 

可以在service實現類上面添加事物注解,也可以在方法上面添加事物注解,或者在xml 文件中添加service事物控制器的管理

@Service 

@Transactional

 

<context:component-scan base-package="com.liwei.springdata.service"></context:component-scan>

 

 

 

總結如下

(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