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

@Transactional注解下部分保存失败仍有数据留存,需实现全量回滚的问题咨询

@Transactional注解下部分保存失败仍有数据留存,需实现全量回滚的问题咨询

各位好,我现在碰到一个事务相关的问题,想请大家帮忙看看:

我希望在执行多个实体保存操作时,只要其中任何一个保存失败,所有已经执行的保存操作都要完全回滚,不能有任何数据留在数据库里。

说下我的技术背景:我是基于一个旧项目的现有MySQL 5 schema开发的,所以数据库只能用MySQL 5,但其他技术栈都是最新的——Java 21、Spring Boot 3.4.1。另外这个旧schema的主键是我们自己代码生成的,逻辑就是取最后生成的主键值加1,这个规则我必须严格遵守,没办法改。

我自己写了一个带@Transactional注解的方法,代码如下:

@Transactional
public void saveEntity(Subscription newSubscription, SubscriptionHistory h, SubscriptionHistory2 h2,
        FutureChange futureChange) {
    try {
        subscriptionRepo.save(newSubscription);
        subscriptionHistoryRepo.save(h);
        subscriptionHistory2Repo.save(h2);
        futureChangeRepo.save(futureChange);
    } catch (Exception e) {
        throw new EntityFailedToSaveException("Failed to save entity"); // This will trigger a rollback
    }
}

我原本以为抛出自定义异常会触发事务回滚,但不确定这样写是不是真的能保证所有保存操作要么全成功,要么全失败?有没有什么我没考虑到的点,或者需要调整的地方?

备注:内容来源于stack exchange,提问作者mildgrey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 11:58:06