You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Data JPA加@Modifying执行更新查询仍报DML操作不支持如何解决

Spring Data JPA DML更新报错解决方案

错误根因

@Modifying 标注的UPDATE/DELETE类DML操作,仅支持 void 或 int/Integer 两种返回值类型,前者表示无需感知操作结果,后者返回本次操作影响的数据库行数。
你的代码中将方法返回值定义为 List<CustomerTransaction>,框架会将语句判定为普通查询而非DML操作,因此即使添加了@Modifying注解仍会抛出“Not supported for DML operations”错误。

修复方案

将方法返回值调整为符合规范的类型即可,示例代码如下:

@Transactional
@Modifying
@Query("update CustomerTransaction ct set ct.amountPayment =:trnAmount WHERE ct.loanAccount.id=:loanAccountId AND ct.paymentTerm=:paymentTerm")
int updateCurrentCustomerTransaction(@Param("loanAccountId") long loanAccountId, 
                                                            @Param("paymentTerm") int paymentTerm, 
                                                            @Param("trnAmount") BigDecimal trnAmount); 

若不需要获取受影响行数,可将返回值改为 void。

补充建议

  • 业务开发中推荐将@Transactional注解放置在Service层的业务方法上,更便于控制事务粒度,放在Repository层也可生效但不符合分层最佳实践
  • 若需要获取更新后的实体数据,需先执行更新方法,再单独调用查询接口获取最新数据,无法在DML方法中直接返回实体集合

内容的提问来源于stack exchange,提问作者Aandre Mc Jerome Abril

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 00:42:01