CacheProvider的exceptionNoClassDefFoundError

我有点新的spring和冬眠,所以我试图实现一些简单的基于Spring 3 + hibernate 4的Web应用程序,而我启动tomcat我有这个例外:

java.lang.NoClassDefFoundError: org/hibernate/cache/CacheProvider at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2427) at java.lang.Class.getDeclaredMethods(Class.java:1791) ... Caused by: java.lang.ClassNotFoundException: org.hibernate.cache.CacheProvider at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523) 

我发现这个类在hibernate 3的hibernate-core中,但是我没有在hibernate 4中find它。

我的context.xml的部分持久性:

 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="org.hsqldb.jdbcDriver"/> <property name="url" value="jdbc:oracle:thin:@IP_Address:SID"/> <property name="username" value="xxx"/> <property name="password" value="xxx"/> <property name="initialSize" value="5"/> <property name="maxActive" value="20"/> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="packagesToScan" value="com.huawei.vms.user"/> <property name="hibernateProperties"> <props> <prop key="dialect">org.hibernate.dialect.Oracle10gDialect</prop> </props> </property> </bean> 

请帮我弄清楚它为什么要加载CacheProvider,因为我没有在context.xml中设置任何设置,而且我必须在我的项目中添加哪个jar。 谢谢!

改变你的AnnotationSessionFactoryBean到org.springframework.orm.hibernate4.LocalSessionFactoryBean (Hibernate 4),你会很好。 AnnotationSessionFactoryBean被replace为LocalSessionFactoryBean,因为它现在可以进行类path扫描。

这可能是由于在Hibernate 4中引入了与Spring支持Hibernate不兼容的更改。 这个问题谈到添加单独的包来支持hibernate 4.你将需要spring 3.1。 另一个select是坚持hibernate3,如果你不需要任何特定的function介绍4。

更新AnnotationSessionFactoryBean到hibernate4是完美的。 还要确保你的transactionManager也指向了hibernate4,

 <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="packagesToScan" value="PACKAGE_NAME"></property> <property name="hibernateProperties"> <props> <prop key="dialect">org.hibernate.dialect.MySQLDialect</prop> </props> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> 

一个真正简单的问题会导致相同的错误,只是在pom(4.something)中的hibernate版本和springconfiguration中指定的版本之间存在不匹配。