天天看点

启动tomcat报错org.hibernate.cache.CacheProvider

启动tomcat报错org.hibernate.cache.CacheProvider

caused by: java.lang.noclassdeffounderror: lorg/hibernate/cache/cacheprovider;  

    at java.lang.class.getdeclaredfields0(native method)  

    at java.lang.class.privategetdeclaredfields(class.java:2291)  

    at java.lang.class.getdeclaredfields(class.java:1743)  

    at org.springframework.orm.jpa.support.persistenceannotationbeanpostprocessor.findpersistencemetadata(persistenceannotationbeanpostprocessor.java:374)  

    at org.springframework.orm.jpa.support.persistenceannotationbeanpostprocessor.postprocessmergedbeandefinition(persistenceannotationbeanpostprocessor.java:322)  

    at org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.applymergedbeandefinitionpostprocessors(abstractautowirecapablebeanfactory.java:840)  

    at org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory.java:495)  

    at org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory.java:458)  

    at org.springframework.beans.factory.support.abstractbeanfactory$1.getobject(abstractbeanfactory.java:295)  

    at org.springframework.beans.factory.support.defaultsingletonbeanregistry.getsingleton(defaultsingletonbeanregistry.java:223)  

    at org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:292)  

    at org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:198)  

    at org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:270)  

    at org.springframework.context.annotation.commonannotationbeanpostprocessor.autowireresource(commonannotationbeanpostprocessor.java:442)  

    at org.springframework.context.annotation.commonannotationbeanpostprocessor.getresource(commonannotationbeanpostprocessor.java:416)  

    at org.springframework.context.annotation.commonannotationbeanpostprocessor$resourceelement.getresourcetoinject(commonannotationbeanpostprocessor.java:550)  

    at org.springframework.beans.factory.annotation.injectionmetadata$injectedelement.inject(injectionmetadata.java:159)  

    at org.springframework.beans.factory.annotation.injectionmetadata.inject(injectionmetadata.java:87)  

    at org.springframework.context.annotation.commonannotationbeanpostprocessor.postprocesspropertyvalues(commonannotationbeanpostprocessor.java:303)  

    ... 31 more  

 spring 的配置文件(beans.xml)如下:

启动tomcat报错org.hibernate.cache.CacheProvider

<?xml version="1.0" encoding="utf-8"?>  

<beans xmlns="http://www.springframework.org/schema/beans"  

    xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:context="http://www.springframework.org/schema/context"  

    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"  

    xsi:schemalocation="http://www.springframework.org/schema/beans  

           http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  

            http://www.springframework.org/schema/context  

           http://www.springframework.org/schema/context/spring-context-3.1.xsd  

           http://www.springframework.org/schema/aop  

           http://www.springframework.org/schema/aop/spring-aop-3.1.xsd  

           http://www.springframework.org/schema/tx   

           http://www.springframework.org/schema/tx/spring-tx-3.1.xsd" default-lazy-init="true" >  

    <context:annotation-config />  

    <context:component-scan base-package="com" />  

    <bean id="datasource" destroy-method="close"  

        class="org.apache.commons.dbcp.basicdatasource">  

        <property name="driverclassname" value="${jdbc.driverclassname}" />  

        <property name="url" value="${jdbc.url}" />  

        <property name="username" value="${jdbc.username}" />  

        <property name="password" value="${jdbc.password}" />  

    </bean>  

    <bean  

        class="org.springframework.beans.factory.config.propertyplaceholderconfigurer">  

        <property name="locations">  

            <value>classpath:jdbc.properties</value>  

        </property>  

    <bean id="sessionfactory"  

        class="org.springframework.orm.hibernate3.annotation.annotationsessionfactorybean">  

        <property name="datasource" ref="datasource" />  

        <property name="packagestoscan">  

            <list>  

                <value>com.kingbase.domain</value>  

            </list>  

        <property name="hibernateproperties">  

            <props>  

            <prop key="hibernate.dialect">  

                    org.hibernate.dialect.mysqldialect  

                </prop>  

                <!-- <prop key="hibernate.dialect">  

                    org.hibernate.dialect.postgresqldialect  

                </prop> -->  

                <prop key="hibernate.show_sql">true</prop>  

                <prop key="hibernate.format_sql">true</prop>  

                <prop key="hibernate.hbm2ddl.auto">update</prop>  

                <prop key="current_session_context_class">thread</prop>  

            </props>  

    <bean id="txmanager"  

        class="org.springframework.orm.hibernate3.hibernatetransactionmanager">  

        <property name="sessionfactory" ref="sessionfactory"></property>  

    <!-- 事务的注解,如 @transactional(readonly=true)   -->  

    <!--<tx:annotation-driven transaction-manager="txmanager" /> 

    -->  

    <aop:config>  

        <aop:pointcut id="bussinessservice"  

            expression="execution(public * com.kingbase.dao..*.*(..))" />  

        <aop:advisor pointcut-ref="bussinessservice" advice-ref="txadvice" />  

    </aop:config>  

    <tx:advice id="txadvice" transaction-manager="txmanager">  

        <tx:attributes>  

            <tx:method name="check*" read-only="true" />  

            <tx:method name="count*" read-only="true" />  

            <tx:method name="search*" read-only="true" />  

            <tx:method name="get*" read-only="true" />  

            <tx:method name="test*" read-only="true" />  

            <tx:method name="is*" read-only="true" />  

            <tx:method name="show*" read-only="true" />  

            <tx:method name="delete*" propagation="required" />  

            <tx:method name="update*" propagation="required" />  

            <tx:method name="save*" propagation="required" />  

            <tx:method name="add*" propagation="required" />  

            <tx:method name="set*" propagation="required" />  

            <tx:method name="verify*" propagation="required" />  

            <tx:method name="create*" propagation="required" />  

            <tx:method name="judge*" propagation="required" />  

        </tx:attributes>  

    </tx:advice>  

</beans>  

我使用hibernate的版本是:4.2.2.final 

spring的版本是:3.2.3.release

原因:hibernate的版本升为4了,但是配置文件中仍使用的是hibernate3

解决办法:

把spring配置文件中的

org.springframework.orm.hibernate3.annotation.annotationsessionfactorybean

改为:

org.springframework.orm.hibernate4.localsessionfactorybean

就ok 了