2017-08-02 41 views
2

我正在使用spring-boot和JPA。我試圖捕獲未經檢查的異常,像(約束違規)拋出交易。即使我添加了catch塊,它會在事務邊界不存在時拋出。如何捕獲未檢查的事務異常

我用Google搜索,發現可以通過事務回調來實現。我試着下面的代碼:仍然給它錯誤

public class TransactionAspect extends TransactionSynchronizationAdapter { 

    @Before("@annotation(org.springframework.transaction.annotation.Transactional)") 
    public void registerTransactionSyncrhonization() { 
     TransactionSynchronizationManager.registerSynchronization(this); 

    } 

    @Override 
    public void afterCompletion(int status) { 
     // code 
     System.out.println(status); 
    } 
} 

請幫助我!

回答

2

您需要手動刷新JPA實體管理器 try{ manager.flush(); }catch(ConstraintViolationException){}。 @Transactional方面是圍繞方法 調用,你不能捕獲這個異常,因爲它在調用方法後被刷新。

+0

+1 Thanks..yeah。你是對的。但有沒有另一種解決方法,而不是手動調用刷新?因爲我必須在任何地方手動調用它。我想使它成爲通用邏輯 – NFE

+0

@NFE我沒有想法,但是您可以嘗試在'@ Transactional'上面的一個級別的方法中提取try {} catch {}或使用'@ ExceptionHandler'來捕獲異常全局 –