是这样的: 首先由两张表 A . B A表中有一个字段 主键id 在B表中是外键 且 这两个表被两个以上系统同时使用.
然后 流程中需要将生成四个 6位字符,挑选一个 A表不存在的字符添加到A表中。然后使用该字符关联数据到B表中.
大概方法结构是这样的:
@Transactional(rollbackFor=Exception.class,value="transactionManager")
xxx F ()throws Exception{
String enbleId=getxxx();//这里是循环将四个字符插入到A表 如果成功没有异常则使用该ID
updatexxx(enbleId); //在这里经过得到的有效id 更新到B表
}
getxxx()方法结果是这样的:
getxxx(){
//准备好四个6位的字符串数组 ids [];
for(String srcid : ids){
try{
//这里使用srcid insert 到A表如果异常 进入catch 进行下一次循环
//如果没有问题 break; 结束循环 返回这个 有效字符串到上面方法 F ()
return enbleid;
} catch(Exception e){
continue;
}
}
}
上面这种结果 ,会出现这样几个问题:
请问这是为什么 ? 如果我在F()方法中捕获异常 ,还可以接受 ,我在内部捕获异常且处理了 为什么还会回滚事物呢?
之前想先查询 再插入,害怕中间的时间差导致 主键约束 所以采用这种方法,但是现在确实很多问题 只要重复就会失败 请问这种问题应该如何解决???
---------------update------------------------------------------
忘记备注了,该问题已经有解决方案了,在试运行,监控中。 将两个事务分开就可以了。