【问题标题】:java.lang.ClassNotFoundException: org.hibernate.cache.CacheProvider exception while integrating spring and hiberatejava.lang.ClassNotFoundException: org.hibernate.cache.CacheProvider 异常同时集成spring和hiberate
【发布时间】:2012-08-15 22:12:59
【问题描述】:

我在尝试测试 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。我这样做了。但我仍然遇到同样的异常。

有人可以帮我确定我在这里缺少什么。

谢谢

【问题讨论】:

    标签: spring hibernate


    【解决方案1】:

    注意:org.hibernate.cache.Provider 在从 Hibernate 3 到 Hibernate 4 的更改中被删除。

    如果你使用 hibernate 3,你可能会得到java.lang.ClassNotFoundException: org.hibernate.cache.CacheProvider。 如果你改成hibernate 4,你不会得到那个,但你首先应该添加hibernate4.jarspring-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>
      

      希望对您有所帮助。

      【讨论】:

      • 我已经使用 4.2.7 版本添加了这个依赖,但是里面没有 CacheProvider 类。
      【解决方案3】:

      您将 HibernateTransactionManager 注入到 DAO 类而不是 HibernateTemplate 中。请检查您的配置文件。

      【讨论】:

        【解决方案4】:

        这个解决方案也对我有用:

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>3.6.10.Final</version>
        </dependency>
        

        在我的例子中,我已经拥有了 hibernate-entitymanager 依赖项,但正在尝试使用最新版本的 hibernate - 4.3.1.Final。不知道为什么这里需要降级,但我在 STS 3.5.0.M2 中基于的“简单 Spring JPA 实用程序项目”可能也有点过时了?

        【讨论】:

          【解决方案5】:

          您必须更改 spring 配置文件。
          改变:

          HibernateTemplate class"org.springframework.orm.hibernate3.HibernateTemplate"
          ,并改变:

          LocalSessionFactoryBean bean"org.springframework.orm.hibernate3.LocalSessionFactoryBean"

          它会起作用的。

          【讨论】:

            【解决方案6】:

            这可能是因为您在 spring 配置文件中为“sessionFactory”使用“org.springframework.orm.hibernate3.LocalSessionFactoryBean”而不是“org.springframework.orm.hibernate4.LocalSessionFactoryBean”。

            【讨论】:

            • OP 正在使用org.springframework.orm.hibernate4.LocalSessionFactoryBean
            • 在我的情况下,hibernate3 的 LocalSessionFactoryBean 得到了进一步提升,我将依赖项更改为使用 4 并得到解决。
            • 好吧,你的案例不是这个问题所涵盖的。您可以提出自己的问题并回答,也可以检查您的案例是否已经存在其他问题。 OP 已经在问题中声明他们从 3 切换到 4。您的回答没有回答 OP 的问题。
            【解决方案7】:

            如果您使用的是 Maven,请尝试将其放入您的 POM 文件中:

            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-entitymanager</artifactId>
                <version>3.6.10.Final</version>
            </dependency>
            

            这对我有用。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-09-10
              • 1970-01-01
              • 2021-05-23
              • 2018-03-11
              • 1970-01-01
              • 2017-05-17
              • 2013-11-02
              相关资源
              最近更新 更多