2012-06-20 55 views
0

我使用Hibernate作爲ORM,並且我的DAO注有@RepositorySpring事務性DAO,異常吞噬

我以這種方式配置了AOP建議。

<tx:advice id="txAdvice" transaction-manager="transactionManager"> 
    <tx:attributes> 
     <tx:method name="save*" propagation="REQUIRED" /> 
     <tx:method name="edit*" propagation="REQUIRED" /> 
     <tx:method name="*" read-only="true" /> 
    </tx:attributes> 
</tx:advice> 

它們工作得很好,它只是,如果有任何SQL異常在這些方法中發生他們沒有抓到,因此沒有顯示出來!我猜是因爲事務在執行該方法後提交,但我不確定。

我該如何處理?

+1

r你確定你沒有try/catch的地方嗎? – hvgotcodes

+0

爲了更好的用戶體驗,我在上下文中配置了異常解析器。 org.springframework.web.servlet.handler.SimpleMappingExceptionResolver捕獲所有異常並重定向到某個視圖。 我刪除它,現在它捕獲並打印HibernateExceptions,好消息。但我仍然想保留Exception Resolver,你有什麼想法,但在控制檯中打印異常? 感謝您給我這個想法。 – braincell

回答

1

看看this similar post。它建議擴展SimpleMappingExceptionResolver

public class LoggingExceptionResolver extends SimpleMappingExceptionResolver { 
private Logger logger = LoggerFactory.getLogger(LoggingExceptionResolver.class); 

@Override 
protected void logException(Exception ex, HttpServletRequest request) { 
    this.logger.warn(buildLogMessage(ex, request), ex); 
}