Spring+mybatis注釈構成トランザクションの失効問題

10396 ワード

问题详述:サービスの中のthis.payBookMapper.insertFE20Data(targetMapMain);挿入に失敗すると、thisはロールバックされません.payBookMapper.insertFE20Item(targetItemMap);挿入レコード
まず、サービスのメソッドコードは以下の通りであり、サービスクラスに@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を構成してサービスを排除しない場合、アプリケーションContext.xmlで自動的にサービスをスキャンしてControllerを排除しないと、トランザクションは失効し、上のファイルのコメントに誤って構成されます.