首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring:@事务性rollbackFor检查异常

问Spring:@事务性rollbackFor检查异常
EN

Stack Overflow用户
提问于 2020-07-30 11:54:17
回答 1查看 116关注 0票数 0

当我从"invokeProcedureForLead“方法(下面提到的代码)得到检查异常时,我正在尝试实现事务性回滚。我已经尝试了多种方法和一些参考,但它并不适合我。

要了解更多的信息,请参阅下面的代码

代码语言:javascript
复制
@Transactional(rollbackFor = Exception.class)
    public LeadResponseDTO processDataInDB(LMCRAResponseData lmcraResponse,
            Boolean crnPresentFlag, Map<Integer, Integer> craProcData,
            Map<Integer, Integer> crnProcData,LeadResponseDTO leadResponseDTO,LMCRARequestData lmcraRequestData) throws CRAProcessDBException,SQLException, CRAProcessClientException {
        try{
        leadResponseDTO = extractDecision(lmcraResponse,crnPresentFlag);
        
        decisionEngineResponseDao.invokeProceduresForLead(craProcData, crnProcData, lmcraResponse);
        
        }catch(Exception e){
              
        log.error("error in invokeProcCalls", e);
        if (masterErrorCodes.getErrorDTO("6006") != null)
            logException(lmcraResponse, masterErrorCodes.getErrorDTO("6006"));
         leadResponseDTO=new LeadResponseDTO(); 
         getLeadResponseDTO(lmcraRequestData,leadResponseDTO,e.getMessage());
        
    
        
        }       
    
        return leadResponseDTO;
    }



public void invokeProceduresForLead(Map<Integer, Integer> craProcData,
            Map<Integer, Integer> crnProcData, LMCRAResponseData lmcraResponseData) throws   Exception  {
        int noCRNFlag = 0;
        String commonLogs = CommonUtil.printDECommonLogs(lmcraResponseData);
    
        if (lmcraResponseData.isBureauMatch() && crnProcData.isEmpty())
            noCRNFlag = 1;

        
        if (lmcraResponseData.isBureauMatch()
                && invokeProcLeads(craProcData, DBConstants.CALL_PROC_PROCESS_CRA_DATA_LEAD,
                        Integer.parseInt(lmcraResponseData.getCaseID())) != null) {
            log.info("invokeProcLeads for Cra block - 1 for runId {} " , commonLogs);
            throw new CRAProcessDBException("error in invokeProcCalls for CRA");
            
            
        }
        if (crnProcData != null
                && !crnProcData.isEmpty()
                && invokeProcLeads(crnProcData, DBConstants.CALL_PROC_PROCESS_CRN_DATA_LEAD,
                        Integer.parseInt(lmcraResponseData.getCaseID())) != null) {
            log.info("invokeProcLeads for crn  block - 2 for runId {} " , commonLogs);
            throw new CRAProcessDBException("error in invokeProcCalls for CRN");
            
        }
        if (((crnProcData == null || crnProcData.isEmpty()) || !lmcraResponseData.isBureauMatch())
                && invokeNoCrnForLeads(DBConstants.CALL_PROC_PROCESS_NO_CRN_DATA_LEAD,
                        Integer.parseInt(lmcraResponseData.getCaseID()), noCRNFlag) != null) {
            log.info("invokeNoCrnForLeads block - 3 for runId {} " , commonLogs);
            throw new CRAProcessDBException("error in invokeProcCalls for NOCRN");
            
            
        }
EN

回答 1

Stack Overflow用户

发布于 2020-07-31 12:44:41

我认为密码需要像这样改变-

代码语言:javascript
复制
log.error("error in invokeProcCalls", e);

if (masterErrorCodes.getErrorDTO("6006") != null)

logException(lmcraResponse,masterErrorCodes.getErrorDTO("6006"));

leadResponseDTO=new LeadResponseDTO();getLeadResponseDTO(lmcraRequestData,leadResponseDTO,e.getMessage());

}

抛e;

注意,**抛e;**行添加..。

问题是,您正在从内部调用抛出一个异常,但随后在外部方法中吞并它。因此,不会从外部方法抛出异常,从而不会发生回滚。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63172625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档