mybatis事​​务回滚

时间:2017-05-24 02:07:34

标签: java spring mybatis

案例1:

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);
    }
}

案例2:

@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个案例时,会再次抛出错误,但数据仍然插入数据库并且不会发生回滚。

1 个答案:

答案 0 :(得分:0)

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

这意味着例如第一次调用objectService.insert(map1)运行正常,问题发生在第二次调用期间。那时第一个事务已经提交,即使插入第二个记录存在一些问题,第一个事务的结果也已经持久化到数据库。这似乎没有TestService.insert上的回滚。

相关问题