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

@Transactional注解方法中save返回null时如何实现事务回滚?

Spring Boot + MongoDB 多集合保存回滚实现方案

前置依赖校验

首先要确保你的环境支持MongoDB事务,否则@Transactional注解不会生效:

  • MongoDB版本 >= 4.0,且部署为副本集或分片集群(单节点MongoDB不支持事务)
  • 项目中已配置MongoDB事务管理器,配置示例如下:
@Configuration
public class MongoConfig {
    @Bean
    MongoTransactionManager transactionManager(MongoDatabaseFactory dbFactory) {
        return new MongoTransactionManager(dbFactory);
    }
}
  • 注意:你提到的Spring Boot 5不存在,当前最高正式版本为Spring Boot 3.x,若你使用的是Spring 5 + Spring Boot 2.x,只需保证Spring Data MongoDB版本 >= 2.1.0即可支持事务。

回滚逻辑实现

Spring的@Transactional注解默认会在方法抛出未捕获的RuntimeException或Error时触发事务回滚,你只需在两次保存操作后添加返回值校验,任意返回值为null时抛出运行时异常即可触发回滚。
同时你原始代码存在笔误:userRepository.save(builderToSave)中的builderToSave未定义,应为userToSave,修正后的完整代码如下:

@Service
@RequiredArgsConstructor
@Slf4j
public class UserServiceImpl implements UserService{

    private final AutoMapper autoMapper;
    private final UserRepository userRepository;
    private final AdminUserRepository adminUserRepository;

    @Override
    @Transactional(rollbackFor = Exception.class) // 可配置所有异常都回滚,按需调整范围即可
    public SaveUserResponse create(UserDto newUser){
        AdminUser adminUser = autoMapper.map(newUser, AdminUser.class);
        User userToSave = autoMapper.map(newUser, User.class);

        AdminUser savedAdminUser = adminUserRepository.save(adminUser);
        User savedUser = userRepository.save(userToSave);

        // 新增返回值校验,不满足条件直接抛出异常触发回滚
        if (savedAdminUser == null || savedUser == null) {
            log.error("用户保存失败,返回值为空,触发事务回滚");
            throw new RuntimeException("用户数据保存异常");
            // 也可以抛自定义业务异常,只要是RuntimeException子类即可
        }

        return new SaveUserResponse(savedUser);
    }
}

额外注意事项

  • 正常情况下Spring Data MongoDB的save方法操作成功后不会返回null,若你担心保存失败,也可以直接捕获save方法抛出的异常,默认也会触发回滚
  • 不要在create方法内部捕获用于触发回滚的异常,否则事务管理器无法感知异常,不会触发回滚,异常需抛出到上层处理
  • 若你的业务需要抛出检查异常(非RuntimeException子类),必须在@Transactional注解中添加rollbackFor = 你的异常类.class配置,否则不会触发回滚

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 17:57:03