2012-06-20 57 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); 
}