Spring同类事务方法调用事务方法是否失效?saveAddress是否回滚?
同一类内事务方法互调的事务问题分析
事务是否失效?
Spring声明式事务依赖动态代理实现,当同一类中被外部调用的doInsert方法直接调用本类的saveAddress方法时,saveAddress上的@Transactional注解会失效。因为内部调用不会经过代理对象的拦截逻辑,Spring无法为saveAddress单独应用事务配置。saveAddress执行后发生异常会回滚吗?
这取决于doInsert的事务配置:- 如果
doInsert带有@Transactional注解,那么整个doInsert方法处于同一个事务中。只要后续的异常未被捕获且符合Spring事务回滚规则(默认是RuntimeException和Error),整个事务会回滚,saveAddress的操作也会被回滚——但这是依托doInsert的事务,而非saveAddress自身的事务生效。 - 如果
doInsert没有事务注解,那么saveAddress的事务也不会生效,此时发生异常时,saveAddress的操作不会自动回滚,因为没有事务管理机制介入。
- 如果
内容的提问来源于stack exchange,提问作者luochen
相关产品推荐
相关产品推荐

