spring data jpa执行update和delete语句时报错处理
Posted Graffiti
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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时用于注释事务
以上是关于spring data jpa执行update和delete语句时报错处理的主要内容,如果未能解决你的问题,请参考以下文章
spring data jpaspring data jpa 中的update 更新字段,如果原字段值为null不处理,不为null则在原来的值上加一段字符串
Spring Data JPA Update @Query 没有更新?
Spring Data JPA中使用QueryDSL进行查询
Spring Data JPA“ON DUPLICATE KEY UPDATE amount = account.amount + someValue”