2013-10-28 45 views
1

我最近开始使用Spring MVC,并且使用hibernate将数据保存到数据库。我正在学习本教程:http://gerrydevstory.com/2013/06/29/spring-mvc-hibernate-mysql-quick-start-from-scratch/,我很困惑以下找出这个错误。我确定hibernate-core在类路径中,并且所有其他库都放在类路径中。设置休眠时未找到sessionImplementor类

java.lang.NoClassDefFoundError: org/hibernate/engine/SessionImplementor 
at java.lang.Class.getDeclaredMethods0(Native Method) 
at java.lang.Class.privateGetDeclaredMethods(Class.java:2521) 
at java.lang.Class.getDeclaredMethods(Class.java:1845) 
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:384) 
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:194) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389) 
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294) 
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) 
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723) 
at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226) 
at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221) 
at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:724) Caused by: java.lang.ClassNotFoundException: org.hibernate.engine.SessionImplementor 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676) 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521) 
... 25 more 

的applicationContext.xml

<bean id="viewResolver" 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WEB-INF/views/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 


<!-- JDBC Data Source. It is assumed you have MySQL running on localhost 
    port 3306 with username root and blank password. Change below if it's not 
    the case --> 
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" 
    destroy-method="close"> 
    <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
    <property name="url" 
     value="jdbc:mysql://localhost:3306/pizzahut" /> 
    <property name="username" value="root" /> 
    <property name="password" value="root" /> 
    <property name="validationQuery" value="SELECT 1" /> 
</bean> 

<!-- Hibernate Session Factory --> 
<bean id="mySessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="myDataSource" /> 
    <property name="packagesToScan"> 
     <array> 
      <value>com.getty.pizzashop</value> 
     </array> 
    </property> 
    <property name="hibernateProperties"> 
     <value> 
      hibernate.dialect=org.hibernate.dialect.MySQLDialect 
     </value> 
    </property> 
</bean> 

<!-- Hibernate Transaction Manager --> 
<bean id="transactionManager" 
    class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="mySessionFactory" /> 
</bean> 


<!-- Activates annotation based transaction management --> 
<tx:annotation-driven transaction-manager="transactionManager" /> 

<!-- **************************************************************** --> 
<!-- SPRING ANNOTATION PROCESSING --> 
<!-- **************************************************************** --> 
<mvc:annotation-driven /> 
<context:component-scan base-package="com.getty.pizzashop" /> 

是否有人可以提供一些指导?谢谢。

+0

您使用的是哪种构建系统?看起来你设置了不匹配的Hibernate版本(可能是你的类路径上有Hibernate 3,但是你在XML中指定了Hibernate 4)? – chrylis

+0

我正在使用hibernate 4.2.6.Final,我正在使用Spring 3.2.4.Release – user2929965

+0

'SessionImplementor'在'org.hibernate.engine.spi'中,而不是'org.hibernate.engine',并且已经用于所有Hibernate 4.您正在使用针对Hibernate 3编译的某个版本,或者您在某些配置中没有使用它发布声明。 – chrylis

回答

0

我最近将一个旧的项目从Hibernate 3.2迁移到了4.2。确实SessionImplementororg.hibernate.engine移动到 org.hibernate.engine.spi。其他几个类/接口也被移动了。

我最近在migration guide published by RedHat上加了这个和其他项。