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
.
上没有回滚
案例一:
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
.