我的代码有一个DataAccessException,但是找不到它,为什么?

CustomerPlan newCust = data.customerPlan;
try {
    this.demandService.doCreateCustomerPlanAndDemandForecast(newCust,
            newDf);
} catch (DataAccessException de) {
    log.info("de ------------------------------------");
    de.printStackTrace();
    log.info("de  end ------------------------");
} catch (Exception le) {
    log.info("de ------------------------------------");
    le.printStackTrace();
    log.info("de  end ------------------------");
} catch (Throwable t) {
    log.info("tttttttttttttttttttttttt");
    t.printStackTrace();
}


像这样的异常:

at rmes.service.demand.DemandService.doCreateCustomerPlanAndDemandForecast(DemandService.java:132)




@Override
public Serializable save(final Object entity) throws DataAccessException {
    return executeWithNativeSession(new HibernateCallback<Serializable>() {
        @Override
        public Serializable doInHibernate(Session session) throws HibernateException {
            checkWriteOperationAllowed(session);
            return session.save(entity);
        }
    });
}


异常发生在这里,如何捕捉?

最佳答案

我的代码有一个DataAccessException,但是找不到它,为什么?


一些可能的解释是:


因为在try / catch中没有抛出异常;即它被扔到其他地方了。 (仔细阅读完整的堆栈跟踪信息将告诉您这是否成立。)
因为有多个称为DataAccessException的异常(在不同的程序包中),所以您尝试捕获错误的异常。 (仔细阅读完整的stacktrace,然后编写代码会告诉您这是否正确。)
因为您以某种方式设法多次加载DataAccessException。 (只有在您的应用程序或框架在不同的上下文中使用不同的类加载器链时,才会发生这种情况;例如,如果您有多个Web应用程序,则典型的Web容器将执行此操作。)




您这样评论:


  除此之外没有别的地方。


那可能是问题所在。如果在此try / catch上下文中未抛出异常,则此try / catch将无法捕获它!但是,除非您为未捕获的异常发布完整的堆栈跟踪,否则我们将无法为您提供帮助。

10-02 21:20