mybatis 事务回滚

mybatis transaction rollback

案例一:

class TestService{
     @Autowired
     private SqlSessionTemplate sqlSession;

    public void insert(Map map1,Map map2,Map map3){
          sqlSession.insert("testMapper.insert",map1);
          sqlSession.insert("testMapper.insert",map2);
          sqlSession.insert("testMapper.insert",map3);
    }
}

案例二:

@Service
class ObjectService{
     @Autowired
     private SqlSessionTemplate sqlSession;

    public void insert(Map map){
          sqlSession.insert("testMapper.insert",map);
    }
}

class TestService{
     @Autowired
     private ObjectService objectService;

    public void insert(Map map1,Map map2,Map map3){
          objectService.insert(map1);
          objectService.insert(map2);
          objectService.insert(map3);
    }
}

我使用 mybatis,我使用 spring 配置了事务。我有一个问题,案例 #1 中描述的代码抛出异常并且事务被回滚(因此没有真正插入数据库)。

当我 运行 情况 #2 时,错误再次抛出,但数据仍插入数据库并且不会发生回滚。

很可能您的事务配置没有将 TestService.insert 视为事务方法,因此它不会在事务中执行,因此 objectService.insert 的每次调用都在其自己的事务中运行。

这意味着例如第一次调用 objectService.insert(map1) 运行正常,但问题发生在第二次调用期间。那时第一个事务已经提交,即使插入第二个记录也有一些问题,第一个事务的结果已经保存到数据库中。这看起来像是 TestService.insert.

上没有回滚