问题
我是Spring和hibernate的新手,所以我试图实现一些基于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核心,但是我没有在hibernate 4中找到它。
我的context.xml用于持久化的部分:
org.hibernate.dialect.Oracle10gDialect
请帮我弄清楚它为什么要加载CacheProvider,因为我在context.xml中没有任何设置,我必须在我的项目中添加哪个jar。谢谢!
#1 热门回答(184 赞)
将AnnotationSessionFactoryBean更改为org.springframework.orm.hibernate4.LocalSessionFactoryBean(Hibernate 4),你就可以了。 AnnotationSessionFactoryBean已替换为LocalSessionFactoryBean,因为它现在进行类路径扫描。
#2 热门回答(11 赞)
这可能是由于Hibernate 4中引入的更改与Spring对Hibernate的支持不兼容。 Thisissue关于添加单独的软件包以支持hibernate 4.你将需要spring 3.1。如果你不需要4中引入的任何特定功能,另一个选择是坚持休眠3。
#3 热门回答(8 赞)
将AnnotationSessionFactoryBean更新为hibernate4非常完美。还要确保你的transactionManager也指向hibernate4,
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
org.hibernate.dialect.MySQLDialect
class="org.springframework.orm.hibernate4.HibernateTransactionManager">