日期:2014-05-20  浏览次数:20789 次

spring +ibatis ,事务不回滚
我想再问下 ,再service层下调用 两个dao层的数据插入的方法 ,现在我测试事务回滚 ,第一个dao 层插入数据库成功的 ,第二个插入数据库是不成功的 ,为什么事务没有回滚?
这个业务逻辑层的代码  

Java code
public String saveParam(EuserComm euserComm, Bp[] bp, Temp[] temps, Bo[] bo) {
  if(bp==null||bp.length==0){
  throw new RuntimeException("RC002");
  }
  BpPojo[] bpList=new BpPojo[bp.length];
  for(int i=0;i<bp.length;i++){
  BpPojo bpPojo=new BpPojo();
  Bp bpObj=bp[i];
  bpPojo.setBpId(UUIDGenerator.getUUID());
  bpPojo.setRegisterId(bpObj.getRegisterId());
  bpPojo.setUserName(userDao.getUserNameByRegId(bpObj.getRegisterId()));
  bpPojo.setMeasureTime(StringUtil.dateFormat("yyyyMMddHHmm", bpObj.getMeasureTime()));
  bpPojo.setProductNo(euserComm.getProductNo());
  bpPojo.setSendTime(StringUtil.dateFormat("yyyyMMddHHmm", euserComm.getSendTime()));
  bpPojo.setSp(bpObj.getSp());
  bpPojo.setDp(bpObj.getDp());
  int pp=bp[i].getSp()-bp[i].getDp();
  bpPojo.setPp(pp);
  bpList[i]=bpPojo;
  }
  bpDao.saveBp(bpList);
   
  if(temps==null||temps.length==0){
  throw new RuntimeException("RC002");
  }
  TempPojo[] tempList=new TempPojo[temps.length];
  String userName=userDao.getUserNameByRegId(temps[0].getRegisterId());
  for(int i=0;i<temps.length;i++){
  TempPojo tempPojo=new TempPojo();
  Temp temp=temps[i];
  tempPojo.setTempId(UUIDGenerator.getUUID());
  tempPojo.setRegisterId(temp.getRegisterId());
  tempPojo.setProductNo(euserComm.getProductNo());
  tempPojo.setSendTime(StringUtil.dateFormat("yyyyMMddHHmm",euserComm.getSendTime()));
  tempPojo.setUserName(userName);
  tempPojo.setMeasureTime(StringUtil.dateFormat("yyyyMMddHHmm",temp.getMeasureTime()));
  tempPojo.setTempValue(Float.parseFloat(temp.getTempValue()));
  tempList[i]=tempPojo;  
  }
  tempDao.saveTemp(tempList);
   
  return "RC001";
  }
[/code]

------解决方案--------------------
我觉得是ibatis的bug
后来通过Spring的AOP切入解决