【问题标题】:mybatis transaction rollbackmybatis 事务回滚
【发布时间】:2017-05-24 02:07:34
【问题描述】:

案例一:

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

【问题讨论】:

    标签: java spring mybatis


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-27
      • 2020-02-06
      • 1970-01-01
      • 2020-03-16
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      相关资源
      最近更新 更多