@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
相关产品推荐
相关产品推荐

