2012-10-25 23 views
2

我正在嘗試一個簡單的Hibernate分片示例(Yes,odd,3.0.0 .Beta2使用Hibernate 4.1.7核心和Spring 3.1.2發佈了4年前)和會話工廠初始化期間打這個問題:我如何挑選Spring和Hibernatejava.lang.NoClassDefFoundError:來自Spring 3.1.2/Hibernate 4.1.7的org/hibernate/engine/SessionFactoryImplementor和Shards 3.0.0.Beta2

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mySessionFactory' defined in class path resource [shardedspring-config.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.hibernate.SessionFactory it.sella.lab.crm.sys.persistence.ShardedSessionFactoryBuilder.createSessionFactory()] threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/engine/SessionFactoryImplementor 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:581) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1015) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:911) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:609) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:469) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
    at in.rixx.crm.model.Activity.<clinit>(Activity.java:17) 

這就是:

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>4.1.7.Final</version> 
</dependency> 
<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>3.1.2.RELEASE</version> 
</dependency> 

這看起來不像碎片庫的問題 - 它看起來像是由重構的Sessio引起的一般問題nFactoryImplementor類。參考https://jira.springsource.org/browse/SPR-8885,我也切換到bean'transactionmanager'的org.springframework.orm.hibernate4.HibernateTransactionManager - 它沒有幫助。

Spring 3.x和Hibernate 4.x有沒有什麼功能解決方法?

+0

從嘗試了答案:http://stackoverflow.com/questions/9908452/java-lang -classnotfoundexception-org-hibernate-engine-sessionfactoryimplementor – 2014-02-21 13:45:12

回答

2

我看到你正在使用帶彈簧的HIbernate 4。所以看起來像春天&休眠互相兼容性問題。所以請訪問下面的網站以獲取Hibernate 4與Spring的兼容性。

http://blog.springsource.org/2012/04/06/migrating-to-spring-3-1-and-hibernate-4-1/

否則作爲另一種選擇試試下面的版本。

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>3.3.1.GA</version> 
    </dependency> 
0

Hibernate的核心並不需要註釋的任何依賴一些確保您的POM沒有休眠的註釋中有任何依賴性或休眠常見的註釋。

我的工作pom如下。

<properties> 
    <spring.version>4.0.5.RELEASE</spring.version> 
    <junit.version>4.11</junit.version> 
    <jdk.version>1.6</jdk.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 

    <!-- Spring dependencies --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

    <!-- Servlet --> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>3.0-alpha-1</version> 
    </dependency> 

    <!-- JSTL --> 
    <dependency> 
     <groupId>jstl</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
    </dependency> 


    <!-- Apache Commons Upload --> 
    <dependency> 
     <groupId>commons-fileupload</groupId> 
     <artifactId>commons-fileupload</artifactId> 
     <version>1.2.2</version> 
    </dependency> 

    <!-- Apache Commons Upload --> 
    <dependency> 
     <groupId>commons-io</groupId> 
     <artifactId>commons-io</artifactId> 
     <version>1.3.2</version> 
    </dependency> 

    <!-- MYSQL dependency --> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.6</version> 
    </dependency> 

    <!-- Hibernate --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>4.3.5.Final</version> 
    </dependency> 

    <!-- If using JPA (2), add: --> 


    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.5.6</version> 
    </dependency> 

    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.5.6</version> 
    </dependency> 

    <dependency> 
     <groupId>c3p0</groupId> 
     <artifactId>c3p0</artifactId> 
     <version>0.9.1.2</version> 
    </dependency> 

    <dependency> 
     <groupId>org.javassist</groupId> 
     <artifactId>javassist</artifactId> 
     <version>3.18.1-GA</version> 
    </dependency> 

</dependencies> 
0

人刪除休眠常見的註解我得到不同的錯誤 拋出java.lang.ClassNotFoundException:org.hibernate.engine.SessionFactoryImplementor

這是與會話工廠和事務管理

之間的版本差異

這裏是鏈接對於上述方案 [從鏈路http://devjav.com/spring-java-lang-classnotfoundexception-org-hibernate-engine-sessionfactoryimplementor/][1]

解決方案: 使用正確的版本,Hibernate查詢事務管理器和本地會話工廠bean

org.springframework.orm.hibernate3.HibernateTransactionManager 
org.springframework.orm.hibernate3.LocalSessionFactoryBean 
<beans:bean id="sessionFactory" name="sessionFactory" 
     class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
     <beans:property name="configLocation"> 
      <beans:value>classpath:hibernate.cfg.xml</beans:value> 
     </beans:property> 
     <beans:property name="hibernateProperties"> 
      <beans:props> 
       <beans:prop key="hibernate.show_sql">true</beans:prop> 
      </beans:props> 
     </beans:property> 
    </beans:bean> 
<beans:bean id="transactionManager" 
     class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <beans:property name="sessionFactory" ref="sessionFactory" /> 
    </beans:bean> 
+2

請在答案中包含解決方案,因爲鏈接可能並不總是可用的。 –

3

I too faced the same issue i searched some other sites and its helped me to resolve this issue.What i done wrong is hibernate version i used 4 in maven for transaction manager but in the maven i am configuring the hibernate transaction manager of version 3, that's incompatibility. I changed the spring configuration file like this.

<bean id="hibernateTransactionManager" 
     class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 
    <!-- <bean id="hibernateTransactionManager" 
     class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> --> 
相關問題