在service层操作多张表时,加上@Transactional,尝试用 try catch来捕获异常,原本以为这样写会实现同一事务中某一个发生异常时,其他操作都会得到回滚
1 @Transactional(rollbackFor=Exception.class) 2 @Override 3 public JSONObject delFywsjManages(HttpServletRequest request, HttpServletResponse response){ 4 JSONObject json = new JSONObject(); 5 String params = request.getParameter("params"); 6 String ywid = JSONUtil.getJSONString(params, "ywid");//业务id 7 String quiz = JSONUtil.getJSONString(params, "quiz");//业务类型 8 if(StringUtils.isBlank(ywid) || StringUtils.isBlank(quiz)){ 9 json.put("code",1); 10 json.put("message","参数不能为空"); 11 return json; 12 } 13 try { 14 int result = 0; 15 switch (quiz.trim()){ 16 case "sl"://申领 17 String applyId = fywsjManagesMapper.getApplyBakByApplyId(ywid); 18 if(StringUtils.isBlank(applyId)){ 19 result = fywsjManagesMapper.insertApplyBak(ywid); 20 if(result != 0){ 21 //1.apply_info 主表 id 22 fywsjManagesMapper.deleteApplyInfo(ywid); 23 //2.apply_acceptance 受理表 applyId 24 fywsjManagesMapper.deleteApplyAcceptance(ywid); 25 //3.apply_check 审查意见 applyId 28 fywsjManagesMapper.deleteApplyCheck(ywid); 29 //4.apply_decide 决定 applyId 30 fywsjManagesMapper.deleteApplyDecide(ywid); 31 //5.apply_transaction 办结 applyId 32 fywsjManagesMapper.deleteApplyTransaction(ywid); 33 throw new RuntimeException(); 34 } 35 }else{ 36 json.put("code",1); 37 json.put("message","当前申领信息在备份表中已存在,备份失败"); 38 return json; 39 } 40 break; 41 case "hl"://换领 42 43 break; 44 case "bl"://补领 45 46 break; 47 case "zj"://增驾 48 49 break; 50 case "zc"://转出 51 52 break; 53 case "zr"://转入 54 55 break; 56 case "hf"://恢复 57 58 break; 59 } 60 }catch (Exception e){ 61 json.put("code",1); 62 json.put("message","删除失败"); 63 throw new RuntimeException(); 64 }finally { 65 return json; 66 } 67 }