DataAccessException无法捕获

时间:2014-12-14 07:32:44

标签: java spring

我的代码有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);
        }
    });
}

这里有例外,怎么抓住它?

1 个答案:

答案 0 :(得分:0)

  

我的代码有一个DataAccessException,但它无法被捕获,为什么?

一些可能的解释是:

  • 因为在try / catch中没有抛出异常;即它被抛到其他地方。 (仔细阅读完整的堆栈跟踪将告诉您这是否属实。)

  • 因为有多个异常称为DataAccessException(在不同的包中)并且您试图捕获错误的异常。 (仔细阅读完整的堆栈跟踪,您的代码会告诉您这是否属实。)

  • 因为您以某种方式设法多次加载DataAccessException。 (只有当您的应用程序或框架在不同的上下文中使用不同的类加载器链时才会发生这种情况;例如,如果您有多个Web应用程序,典型的Web容器将执行此操作。)


您评论如此:

  

除此之外没有其他地方。

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