
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)如下:

<?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 了