1. 程式人生 > >spring data jpa執行update和delete語句時報錯處理

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

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

@Query(value = "delete parcel,parcel_file,ms_files,t_order,route " +
            "from parcel left join route on parcel.route_id = route.id" +
            " left join t_order on t_order.parcel_id = parcel.id" +
            " left join parcel_file on parcel.id = parcel_file.parcel_id" +
            " left join ms_files on parcel_file.file_uuid = ms_files.uuid " +
            "where parcel.id = ?1", nativeQuery = true)
    void deleteByParcelId(Long parcelId);

報錯提示:

 最後查閱資料發現瞭解決辦法,同時加上註解@Modifying和Transactional

    @Modifying
    @Transactional
    @Query(value = "delete parcel,parcel_file,ms_files,t_order,route " +
            "from parcel left join route on parcel.route_id = route.id" +
            " left join t_order on t_order.parcel_id = parcel.id" +
            " left join parcel_file on parcel.id = parcel_file.parcel_id" +
            " left join ms_files on parcel_file.file_uuid = ms_files.uuid " +
            "where parcel.id = ?1", nativeQuery = true)
    void deleteByParcelId(Long parcelId);


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

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

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