title: Spring Boot: @Transactional rollbackFor checked Exception
body: <p>I am trying to achieve transactional rollback when i will get checked exception from                 &quot;<strong>invokeProcedureForLead</strong>&quot; method(code mentioned below). I have tried multliple ways and some reference still
  it is not working for me .</p>
  <p>For more understanding please find below code</p>
  <pre><code>@Transactional(rollbackFor = Exception.class)
      public LeadResponseDTO processDataInDB(LMCRAResponseData lmcraResponse,
              Boolean crnPresentFlag, Map&lt;Integer, Integer&gt; craProcData,
              Map&lt;Integer, Integer&gt; crnProcData,LeadResponseDTO leadResponseDTO,LMCRARequestData lmcraRequestData) throws CRAProcessDBException,SQLException, CRAProcessClientException {
          try{
          leadResponseDTO = extractDecision(lmcraResponse,crnPresentFlag);
          
          decisionEngineResponseDao.invokeProceduresForLead(craProcData, crnProcData, lmcraResponse);
          
          }catch(Exception e){
                
          log.error(&quot;error in invokeProcCalls&quot;, e);
          if (masterErrorCodes.getErrorDTO(&quot;6006&quot;) != null)
              logException(lmcraResponse, masterErrorCodes.getErrorDTO(&quot;6006&quot;));
           leadResponseDTO=new LeadResponseDTO(); 
           getLeadResponseDTO(lmcraRequestData,leadResponseDTO,e.getMessage());
          
      
          
          }       
      
          return leadResponseDTO;
      }
  
  
  
  public void invokeProceduresForLead(Map&lt;Integer, Integer&gt; craProcData,
              Map&lt;Integer, Integer&gt; crnProcData, LMCRAResponseData lmcraResponseData) throws   Exception  {
          int noCRNFlag = 0;
          String commonLogs = CommonUtil.printDECommonLogs(lmcraResponseData);
      
          if (lmcraResponseData.isBureauMatch() &amp;&amp; crnProcData.isEmpty())
              noCRNFlag = 1;
  
          
          if (lmcraResponseData.isBureauMatch()
                  &amp;&amp; invokeProcLeads(craProcData, DBConstants.CALL_PROC_PROCESS_CRA_DATA_LEAD,
                          Integer.parseInt(lmcraResponseData.getCaseID())) != null) {
              log.info(&quot;invokeProcLeads for Cra block - 1 for runId {} &quot; , commonLogs);
              throw new CRAProcessDBException(&quot;error in invokeProcCalls for CRA&quot;);
              
              
          }
          if (crnProcData != null
                  &amp;&amp; !crnProcData.isEmpty()
                  &amp;&amp; invokeProcLeads(crnProcData, DBConstants.CALL_PROC_PROCESS_CRN_DATA_LEAD,
                          Integer.parseInt(lmcraResponseData.getCaseID())) != null) {
              log.info(&quot;invokeProcLeads for crn  block - 2 for runId {} &quot; , commonLogs);
              throw new CRAProcessDBException(&quot;error in invokeProcCalls for CRN&quot;);
              
          }
          if (((crnProcData == null || crnProcData.isEmpty()) || !lmcraResponseData.isBureauMatch())
                  &amp;&amp; invokeNoCrnForLeads(DBConstants.CALL_PROC_PROCESS_NO_CRN_DATA_LEAD,
                          Integer.parseInt(lmcraResponseData.getCaseID()), noCRNFlag) != null) {
              log.info(&quot;invokeNoCrnForLeads block - 3 for runId {} &quot; , commonLogs);
              throw new CRAProcessDBException(&quot;error in invokeProcCalls for NOCRN&quot;);
              
              
          }
  </code></pre>