当我尝试测试spring和hibernate集成时,我得到以下异常。
Caused by: java.lang.ClassNotFoundException: org.hibernate.cache.CacheProvider
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 18 more
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config/>
<!-- Datasource beans -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="url" value="jdbc:mysql://localhost:3306/sterlingschema" />
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
<!-- Hibernate Template session factory bean -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>/org/droidaceapps/domain/users.hbm.xml</value>
</list>
</property>
</bean>
<!-- Hibernate template beans -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- DAO beans -->
<bean id="userDAO" class="org.droidaceapps.dao.UserDAOImpl">
<property name="hibernateTemplate" ref="hibernateTemplate" />
</bean>
<!-- Service beans -->
<bean id="userService" class="org.droidaceapps.services.UserServiceImpl">
<property name="userDAO" ref="userDAO" />
</bean>
当我搜索这个问题时,有人说我们应该使用springframework.orm.hibernate4而不是springframework.orm.hibernate3。我做到了但我仍然得到同样的例外。
有人可以帮我识别我在这里缺少的东西。
谢谢
注意:在从Hibernate 3到Hibernate 4的更改中删除了org.hibernate.cache.Provider。
如果你使用hibernate 3,你可能会得到java.lang.ClassNotFoundException: org.hibernate.cache.CacheProvider
。如果你改为休眠4,你将不会得到它,但你首先应该添加hibernate4.jar
和spring-orm.jar
。
听起来你在项目设置中缺少hibernate依赖项:
引起:java.lang.ClassNotFoundException:org.hibernate.cache.CacheProvider
尝试下载hibernate-core.jar并添加到项目类路径中。
如果您使用Maven,只需将以下依赖项添加到项目的pom.xml:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
希望有所帮助。
您正在将HibernateTransactionManager注入DAO类而不是HibernateTemplate。请检查您的文件配置。
这个解决方案对我也有用:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.6.10.Final</version>
</dependency>
在我的情况下,我已经有了hibernate-entitymanager依赖,但是试图使用最新版本的hibernate - 4.3.1.Final。不知道为什么降级在这里是必要的,但很可能是“简单的春天JPA实用工程”我在STS 3.5.0的基础上.M2也有点过时了?
您必须更改spring配置文件。 改变:
HibernateTemplate class
为"org.springframework.orm.hibernate3.HibernateTemplate"
,并改变:
LocalSessionFactoryBean bean
为"org.springframework.orm.hibernate3.LocalSessionFactoryBean"
它会工作。
这可能是因为您在spring配置文件中使用“org.springframework.orm.hibernate3.LocalSessionFactoryBean”而不是“org.springframework.orm.hibernate4.LocalSessionFactoryBean”作为“sessionFactory”。
如果您正在使用Maven,请尝试将其放入POM文件中:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.6.10.Final</version>
</dependency>
这对我有用。