spring data jpa執行update和delete語句時報錯處理


之前項目中使用spring data jpa時,遇到刪除記錄的需求時,主要利用spring data中自帶的delete()方法處理,最近在dao層使用delete sql語句時報錯,代碼如下:

 

[java]  view plain  copy
 
  1. @Query(value = "delete parcel,parcel_file,ms_files,t_order,route " +  
  2.             "from parcel left join route on parcel.route_id = route.id" +  
  3.             " left join t_order on t_order.parcel_id = parcel.id" +  
  4.             " left join parcel_file on parcel.id = parcel_file.parcel_id" +  
  5.             " left join ms_files on parcel_file.file_uuid = ms_files.uuid " +  
  6.             "where parcel.id = ?1", nativeQuery = true)  
  7.     void deleteByParcelId(Long parcelId);  

報錯提示:

 最后查閱資料發現了解決辦法,同時加上注解@Modifying和Transactional

[java]  view plain  copy
 
  1. @Modifying  
  2. @Transactional  
  3. @Query(value = "delete parcel,parcel_file,ms_files,t_order,route " +  
  4.         "from parcel left join route on parcel.route_id = route.id" +  
  5.         " left join t_order on t_order.parcel_id = parcel.id" +  
  6.         " left join parcel_file on parcel.id = parcel_file.parcel_id" +  
  7.         " left join ms_files on parcel_file.file_uuid = ms_files.uuid " +  
  8.         "where parcel.id = ?1", nativeQuery = true)  
  9. void deleteByParcelId(Long parcelId);  


加上兩個注解后問題成功解決了,只加上其中任意一個注解還是會報錯,只有同時加上兩個注解時才可以。

@Modifying注解與@Query一起使用表示將查詢操作標識為修改查詢,這樣框架最終會生成一個更新的操作,而非查詢

@Transactional:spring整合jpa時用於注釋事務


免責聲明!

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



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