Java.lang.ClassNotFoundException: org.hibernate.cache.CacheProvider исключение при интеграции spring и hiberate
Я получаю следующее исключение, когда пытаюсь протестировать интеграцию 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>
Когда я googled по этой проблеме, некоторые сказали, что мы должны использовать springframework.orm.hibernate4 вместо springframework.orm.hibernate3. Я это сделал. Но все же я получаю то же исключение.
Может кто-нибудь помочь мне в определении того, что мне здесь не хватает.
Спасибо
Ответы
Ответ 1
Примечание: org.hibernate.cache.Provider был удален при смене из Hibernate 3 в Hibernate 4.
Если вы используете спящий режим 3, вы можете получить java.lang.ClassNotFoundException: org.hibernate.cache.CacheProvider
.
Если вы перейдете на спящий режим 4, вы не получите этого, но сначала вы должны добавить hibernate4.jar
и spring-orm.jar
.
Ответ 2
Звучит похоже, что в вашем проекте отсутствует зависимость от спящего режима:
Вызвано: 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>
Надеюсь, что это поможет.
Ответ 3
Вы должны изменить конфигурационный файл spring.
изменить:
HibernateTemplate class
как "org.springframework.orm.hibernate3.HibernateTemplate"
, и измените:
LocalSessionFactoryBean bean
как "org.springframework.orm.hibernate3.LocalSessionFactoryBean"
он будет работать.
Ответ 4
Вы вводите HibernateTransactionManager в класс DAO вместо HibernateTemplate. Проверьте конфигурацию своего файла.
Ответ 5
Это решение тоже работало для меня:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.6.10.Final</version>
</dependency>
В моем случае у меня уже была зависимость hibernate-entitymanager, но пыталась использовать последнюю версию hibernate - 4.3.1.Final. Не уверен, почему здесь требовалось понижение рейтинга, но есть вероятность, что "простой проект w760 > JPA Utility", который я использовал в STS 3.5.0.M2, также немного устарел?
Ответ 6
Если вы используете Maven, попробуйте поместить его в свой файл POM:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.6.10.Final</version>
</dependency>
Это сработало для меня.