spring+mybatis注解配置事务失效问题

问题描述:Service里的this.payBookMapper.insertFE20Data(targetMapMain);插入失败,则不回滚this.payBookMapper.insertFE20Item(targetItemMap);插入的记录

首先,Service里的方法代码如下,并且在Service类上面添加@Transactional

/**
	 * 缴款书开具
	 */
	@Override
	public Map insertFSData(List> fsdatalist) {
	    boolean flag = false;
	    String error_msg = "";
		//循环校验数据
		logger.info("***********缴款书开具开始************");
		logger.info("请求报文:"+DataTypeConver.toJsonArray(fsdatalist));
		/*for (Map map : fsdatalist) {
			if (!_checkColumnInvalid(map) || !_checkDataInvalid(map) ||!_checkBusinessInvalid(map)) {
				logger.info(message);
				insertLog("2", message, map, "缴款确认", "");
				return toListArrayResult(message);
			}
		}*/
		String pay_code = "";
		//循环保存数据
		logger.info("开始插入缴款确认信息");
		for (Map map : fsdatalist) {
		    pay_code = (String)map.get("pay_code");
		   
	        Map targetMapMain = convertMapMain(map);
	        if(!targetMapMain.containsKey("afa050")) {
                flag = true;
                break;
            }
			//this.payBookMapper.insertFE20Data(convertMapMain(map));
			//插入实时从表
			List> item_details = (List>)map.get("item_details");
			List> details = new ArrayList>(); 
			for(int i=0;i itemMap = item_details.get(i);
			    itemMap.put("afc150", map.get("pay_code"));//主键
			    itemMap.put("afa050", targetMapMain.get("afa050"));//单位内码
			    itemMap.put("item_no", (i+1));
			    Map targetItemMap = convertMapItem(itemMap);
			    if(!targetItemMap.containsKey("afa030")) {
			        error_msg = "单位编码不存在";
			        flag = true;
			        break;
			    }
			    //收费项目错误
			    if(!targetItemMap.containsKey("afa260")) {
			        error_msg = "收费项目错误";
                    flag = true;
                    break;
                }
			   
			    this.payBookMapper.insertFE20Item(targetItemMap);
			    details.add(targetItemMap);
			}
			 //计算校验码
            String vcode = null;
            targetMapMain.put("item_details", details);
			 try {
			     vcode = BillVerify.getInstance().getFullPayBillInfo(targetMapMain);
			     targetMapMain.put("afc183",vcode);                     
			 } catch (Exception e) {
			     e.printStackTrace();
			 }
			//插入实时主表
			 //System.out.println("=================");
			 //System.out.println(targetMapMain.get("afc154") == null);
			 //System.out.println("null".equals(targetMapMain.get("afc154")));
			 //System.out.println(((JSONObject)targetMapMain.get("afc154")).isNullObject());
			 this.payBookMapper.insertFE20Data(targetMapMain);
			//更新缴款书校验码
			/*Map param = new HashMap();
			param.put("afc150",targetMapMain.get("afc150"));
			param.put("afc183",vcode);         //校验码     
		    this.payBookMapper.updateByPrimaryKeySelective(param);  */
			insertLog("1", message, map, "缴款书开具", "");
		}
		
		JSONObject msg = new JSONObject();
		String code = "S0000";
		if(flag) {
		    msg.put("pay_code", pay_code);
		    msg.put("security_code", error_msg);//单位编码不存在
		    code = "E0001";
		}else {
    		msg.put("pay_code", pay_code);
    		msg.put("security_code", "0000");
    		logger.info("缴款书开具响应报文:"+toListArrayResult("S0000",msg.toString()));
		}
		
		return toListArrayResult(code,msg.toString());
	}

spring配置文件如下:



    
	
	 
	
	
	  
       
      
    
	
    
	
	
	
      
        
		
		
		
     
  
        
            
        
    
  
  	
      
          
           
      

      
      
        
      
  
      
      
          
    
	   
     
  

spring-mvc配置文件如下:

 



	
	
	 
	
	
	
		    
		
	
	
	
  	
	
  	
	
	
	
	
	
		
		
		
		
	
  	
  	
	  
        
          
        
          
        
          
     
    
  

如果spring-mvc里配置自动扫描Controller不排除Service,applicationContext.xml里自动扫描Service不排除Controller,则事务失效,错误的配置在上面文件的注释里。

 

 

你可能感兴趣的:(java)