在Spring中添加事务,发现会偶发性出现数据未成功更新的情况,但在日志中显示成功执行了sql。按网上的解决方法来手动开启提交事务也会出现一样的问题。但将事务取消在执行就能成功更新。请问如何在保留事务的前提下,修改代码
@Autowired
PlatformTransactionManager platformTransactionManager;
@Autowired
TransactionDefinition transactionDefinition;
@Override
// @Transactional(rollbackFor = Exception.class)
public HttpResult cooperationAdd(CooperationAdd add) {
// DefaultTransactionDefinition def = new DefaultTransactionDefinition();
// def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);
try {
// List<Map<String, Object>> result = outCheckMapper.getFhpz(add.getPzh(), add.getSwh(), add.getCgddh(), add.getCgddhh());
//// if(result != null && result.size() != 0) {
//// list = result;
//// }
for(CG cg:add.getCglist()){
cooperationMapper.cgAdd(cg, add);
}
for(DE de:add.getDelist()){
cooperationMapper.deAdd(de);
}
for(TM tm:add.getTmlist()){
cooperationMapper.tmAdd(tm, add);
}
platformTransactionManager.commit(transactionStatus);
return HttpResult.ok();
}catch (Exception e){
platformTransactionManager.rollback(transactionStatus);
return HttpResult.error(e.getMessage());
}
}
使用注解和手动开启事务切换,但没效果
【相关推荐】
service1 (业务层,调用dao1,dao2)
xxx1()<---------------------------------------- xxx1Dao()持久层
aaa()
xxx2()<-----------------------------------------xxx2Dao()持久层
service2(业务层,调用dao3,dao4)
xxx3()<---------------------------------------- xxx3Dao()持久层
bbb()
xxx4()<-----------------------------------------xxx4Dao()持久层
出现复杂的情况:
同时调用service1.aaa() 和 service2.bbb()方法才能完成一个业务员;假如aaa()有事务,bbb()有事务,那么应该 调用哪个事务呢?