2015-11-26 16 views
14

私はHibernate 5にアップグレードしたかったのですが、何らかの理由でうまく動作しません。 Hibernateは4とSpring 4でHibernate 5を設定する方法

私の春のコンテキストの設定は次のようになります。

.... 
<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="annotatedClasses" ref="hibernateClasses" /> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect"> 
       ${hibernate.dialect} 
      </prop> 
      <prop key="hibernate.show_sql"> 
       ${hibernate.show_sql} 
      </prop> 
      <prop key="hibernate.format_sql">true</prop> 
      <prop key="hibernate.generate_statistics"> 
       ${hibernate.generate_statistics} 
      </prop> 
      <prop key="hibernate.hbm2ddl.auto"> 
       ${hibernate.hbm2ddl.auto} 
      </prop> 
     </props> 
    </property> 
</bean> 

<bean id="transactionManager" 
    class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

.... 

私は、データソースとhibernateClasses豆の定義を残しました。

は、Hibernate 5のために私はこのようhibernate5するパッケージ名を変更:-Sを:私は私のテストを実行したときに

.... 
<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="annotatedClasses" ref="hibernateClasses" /> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect"> 
       ${hibernate.dialect} 
      </prop> 
      <prop key="hibernate.show_sql"> 
       ${hibernate.show_sql} 
      </prop> 
      <prop key="hibernate.format_sql">true</prop> 
      <prop key="hibernate.generate_statistics"> 
       ${hibernate.generate_statistics} 
      </prop> 
      <prop key="hibernate.hbm2ddl.auto"> 
       ${hibernate.hbm2ddl.auto} 
      </prop> 
     </props> 
    </property> 
</bean> 

<bean id="transactionManager" 
    class="org.springframework.orm.hibernate5.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

.... 

は、アプリケーションコンテキストは、それがLocalSessionFactoryBeanクラスを見つけることができないため、起動に失敗しました。このクラスは、春-ORMのJARに存在し、実際に存在しているが、何らかの理由でそれが発見され、次の例外をスローすることはできません。次のように

java.lang.NoClassDefFoundError: Could not initialize class org.springframework.orm.hibernate5.LocalSessionFactoryBuilder 

私のMavenの依存関係は、以下のとおりです。

<!-- Servlet API --> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>${servlet-api.version}</version> 
     <scope>provided</scope> 
    </dependency> 

    <!-- Spring libraries --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-tx</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-core</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-jdbc</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aop</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aspects</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

    <!-- Hibernate --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>${hibernate.version}</version> 
     <exclusions> 
      <exclusion> 
       <groupId>cglib</groupId> 
       <artifactId>cglib</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>asm</groupId> 
       <artifactId>asm</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-simple</artifactId> 
     <version>${slf4j.version}</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>${slf4j.version}</version> 
     <scope>provided</scope> 
    </dependency> 

    <!-- Test --> 
    <dependency> 
     <groupId>cglib</groupId> 
     <artifactId>cglib</artifactId> 
     <version>${cglib.version}</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>asm</groupId> 
     <artifactId>asm</artifactId> 
     <version>${asm.version}</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>${junit.version}</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
     <version>${spring.version}</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-mock</artifactId> 
     <version>${spring-mock.version}</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.easymock</groupId> 
     <artifactId>easymock</artifactId> 
     <version>${easymock.version}</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.hsqldb</groupId> 
     <artifactId>hsqldb</artifactId> 
     <version>${hsqldb.version}</version> 
     <scope>test</scope> 
    </dependency> 

誰も持っています私が間違っているアイデア?

+0

pomファイル内の休止状態のバージョンは何ですか? –

+0

私が使用しているバージョンは5.0.4です。最終的 – Tranquilized

+1

あなたの春バージョンは何ですか?私は春4.2.6と冬眠5.5.3の設定で同じ問題があります。 –

答えて

9

はあなたが

<dependency> 
    <groupId>javax.transaction</groupId> 
    <artifactId>jta</artifactId> 
    <version>1.1</version> 
</dependency> 

を追加する必要かもしれませ私は同じ問題を持っていたし、私の最初のログは不満、

java.lang.NoClassDefFoundError: javax/transaction/SystemException

+0

Thnx !!これはトリックでした – Tranquilized

6

@sapnaの答えが働いています。

しかし、それは休止状態5.0.3.Finalと5.0.4.Finalの間で分割した理由について好奇心のためのもの、ここで答えである:彼らはあった、JTAの依存を削除:

<dependency> 
    <groupId>org.apache.geronimo.specs</groupId> 
    <artifactId>geronimo-jta_1.1_spec</artifactId> 
    <version>1.1.1</version> 
    <scope>compile</scope> 
</dependency> 

変更をHHH-10178

5.0.xから5.0.4または5.0.5にアップグレードしていて、クラスパスに何も変更しない場合は、このlibをjavax.transaction:jtaのものよりもインポートする必要があります。

EDIT: これらの変更は、hibernte 5.0.7:HHH-10307でこの変更を元に戻しました。このバージョン以降にアップグレードすることで問題を解決する必要があります。

関連する問題