请查看并提供建议。 我完全迷失了这个例外。 它发生在spring-orm-4.0.6.RELEASE.jar中,它看起来像是一些类加载问题。 我的WEB-INF \ lib中有 spring-orm-4.0.6 .RELEASE.jar,我确实有 hibernate-core-4.3.6 .Final。那里的罐子, 我试图在Apache Tomcat / 6.0.20下运行这个应用程序(是的,很老了,因为我试图刷新的项目) 我无法理解为什么classloader能够加载HibernateTemplate,但无法加载HibernateTemplate $ 35,他们坐在同一个jar中的同一个dir ...
java.lang.NoClassDefFoundError: org.springframework.orm.hibernate4.HibernateTemplate$35
at org.springframework.orm.hibernate4.HibernateTemplate.findByCriteria(HibernateTemplate.java:1011)
at org.springframework.orm.hibernate4.HibernateTemplate.findByCriteria(HibernateTemplate.java:1003)
at xxx.xxx.SelectionDAO.list(SelectionDAO.java:142)
调用hibernate的代码:
@SuppressWarnings({ "unchecked", "rawtypes" })
public <Entity> List<Entity> list(final Class<Entity> entityClass) {
DetachedCriteria criteria = DetachedCriteria.forClass(entityClass);
return (List)getHibernateTemplate().findByCriteria(criteria);
}
只是为了澄清,我使用的是org.springframework.orm。 hibernate4 .HibernateTemplate
也许这也很有意义,但我发现这个代码是从
调用的private void startSessionClean() {
TimerTask task = new TimerTask() {
public void run() {
try {
dao.list(UserSessions.class);
} catch (Throwable throwable) {
throwable.printStackTrace();
log.error("Error in session cleaner", throwable);
}
}
};
timer.scheduleAtFixedRate(task, DELAY, DELAY);
}
所以我猜这可能会以某种方式与不同的Thread类加载器相关联?有什么想法吗?
答案 0 :(得分:0)
查看HibernateTemplate的javadoc,尝试将其转换为新样式sessionFactory.getCurrentSession()
答案 1 :(得分:0)
我将TimerTask的实现更改为由TaskScheduler运行的spring spring runnable并且问题消失了