企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 本类调用者无注解,被调用者有注解,不生效 注:这种情况使用 propagation = Propagation.REQUIRES\_NEW 去新开启事务也没有用 controller 调用时无事务注解,没走代理,本类调用时有注解但本类调用直接使用this了 ``` @PostMapping("/add") public R<Void> add() { testServiceImpl.add(); return R.ok(); } ``` ``` public void add() { SysDept dept = new SysDept(); dept.setDeptName("是否回滚"); testMapper.insert(dept); addOrUpdate(); } @Transactional(rollbackFor = Exception.class) // 这种情况, 新开启一个事务也没有效果 // @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) public void addOrUpdate() { SysDept dept = new SysDept(); dept.setDeptName("你好1"); testMapper.insert(dept); int i = 0; int j = 5/i; } ``` ## 本类调用者有注解,被调用者有无注解,都生效,被调用者是私有方法也生效,事务传播行为是 不开启事务 也一样都回滚 ``` @Transactional(rollbackFor = Exception.class) public void add() { SysDept dept = new SysDept(); dept.setDeptName("是否回滚"); testMapper.insert(dept); addOrUpdate(); } // propagation 不起作用,都会回滚 @Transactional(rollbackFor = Exception.class, propagation = Propagation.NOT_SUPPORTED) public void addOrUpdate() { // private void addOrUpdate() { SysDept dept = new SysDept(); dept.setDeptName("你好1"); testMapper.insert(dept); int i = 0; int j = 5/i; } ```