案例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个案例时,会再次抛出错误,但数据仍然插入数据库并且不会发生回滚。
答案 0 :(得分:0)
很可能您的事务配置不会将TestService.insert
视为事务方法,因此它不会在事务中执行,因此objectService.insert
的每次调用都在其自己的事务中运行。
这意味着例如第一次调用objectService.insert(map1)
运行正常,问题发生在第二次调用期间。那时第一个事务已经提交,即使插入第二个记录存在一些问题,第一个事务的结果也已经持久化到数据库。这似乎没有TestService.insert
上的回滚。