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

Spring Data自定义查询删除2天前记录报TransactionRequiredException如何解决

问题根因

org.springframework.dao.InvalidDataAccessApiUsageException 嵌套的 javax.persistence.TransactionRequiredException 异常,核心原因是 Spring Data JPA 中所有带 @Modifying 注解的 UPDATE/DELETE 类 DML 操作,必须在事务上下文内执行,你当前的代码缺少事务配置,所以触发报错。

解决方案
  • 第一步:给业务层的 deleteOldRecords 方法添加 @Transactional 注解,注意导入 Spring 提供的事务注解包,不要导入 JPA 原生的同名注解:
import org.springframework.transaction.annotation.Transactional;

@Override
@Transactional
public void deleteOldRecords(long timestamp) {
    testDao.deleteOldRecordsCRUD(timestamp);        
}
  • 第二步(可选优化):可以将 DAO 层方法的返回值从 void 修改为 int,会直接返回本次操作实际删除的记录行数,方便校验执行结果是否符合预期:
@Repository
public interface TestItemDAO extends CrudRepository<TestItem, Long> {
    @Modifying
    @Query(value = "DELETE FROM TEST_TABLE tt WHERE tt.timestamp <= :timestamp", nativeQuery = true)
    int deleteOldRecordsCRUD(@Param("timestamp") long timestamp);
}
  • 第三步(异常场景排查):如果添加注解后仍报错,检查项目是否开启了事务管理:Spring Boot 项目默认自动开启事务支持,传统 Spring 项目需要在配置类上添加 @EnableTransactionManagement 注解手动开启。

内容的提问来源于stack exchange,提问作者JustQuest

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:36:03