web-dev-qa-db-ja.com

Spring 3.1、Hibernate 4、SessionFactory

これは働いていました:

<bean id="sessionFactory"  
      class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
...

ただし、前述のバージョンにアップグレードすると壊れます。 Spring 3.1.ReleaseおよびHibernate 4.0.0.FINALSessionFactory Beanを作成する正しい方法は何ですか?

デプロイ時のエラーは次のとおりです。

ネストされた例外はJava.lang.NoClassDefFoundError:Lorg/hibernate/cache/CacheProviderです。


[〜#〜]編集[〜#〜]
自分で答えを追加しましたが、それで修正されました。

42
NimChimpsky

org.springframework.orm.hibernate4.LocalSessionFactoryBeanの代わりにorg.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBeanを使用する必要があると思います

LocalSessionFactoryBean javadocから:

注:LocalSessionFactoryBeanのこのバリアントには、Hibernate 4.0以降が必要です。役割はorm.hibernate3パッケージの同名のクラスに似ています。ただし、実際には、その主な目的はbootstrap=アノテーションスキャンからのSessionFactoryであるため、AnnotationSessionFactoryBeanに近いです。

92
qnox

Hibernate 4は、以前にリリースされたCacheProvider関連のキャッシュインターフェースを支持して、廃止されたRegionFactory関連のインターフェースとクラスを削除しました。バージョン4キャッシュパッケージの概要 here 、バージョン3.2キャッシュパッケージの概要 hereRegionFactoryインターフェイスが追加される直前)およびバージョン3.3を見つけることができます。キャッシュパッケージの概要 ここRegionFactoryが最初にリリースされたとき)。

JavaDoc以外に、次のドキュメントが役立つ場合があります。

ただし、Spring 3.1に基づく dependencies Spring 3.1では、Hibernate 4は必要ありません(Full Dependencies セクション、 JBoss Hibernate Object-Relational Mapperはバージョン3.3.2.GA)。 Hibernate 4にアップグレードする場合は、キャッシュ設定を更新する必要があります。それ以外の場合は、代わりにHibernate 3.3.2以降の3.Xバージョンを使用してください。

[〜#〜] update [〜#〜]:現在、Spring 3.1のHibernate 4のドキュメントはまばらであることに注意してください。 Spring Framework Reference Documentationには、 Hibernate 4.xのサポート のみが含まれます。

See Javadoc for classes within the new org.springframework.orm.hibernate4 package

Spring 3.1では、Hibernateの LocalSessionFactoryBuilder を拡張する Configuration を導入しています。

Hibernate 4を使用する場合は、一部の その他の変更 に注意する必要があります。

UPDATE 2:この質問は、 CacheProviderの例外NoClassDefFoundError とよく似ていることに気付いただけです。

15
Dan Cruz

この構成を使用する

休止状態の構成ファイル:

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
</bean>

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

POM:

    <!-- CGLIB -->
    <dependency>
        <groupId>cglib</groupId>
        <artifactId>cglib</artifactId>
        <version>${cglib-version}</version>
        <scope>runtime</scope>
    </dependency>

    <!-- Hibernate -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>${org.hibernate-version}</version>
        <!-- will come with Hibernate core -->
    </dependency>

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

私はバージョンを含めるのを忘れていました、私は休止状態バージョンを使用しています:4.1.2.Finalと春バージョン:3.1.1。

8
Defrag

いくつか変更する必要がありました。

私のトランザクションマネージャーでは、セットアップが変更されました3-> 4:

org.springframework.orm.hibernate4.HibernateTransactionManager;

そして、これに私のsessionFactory(@toxinに感謝):

<bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
5
NimChimpsky
  • Hibernate 4.0以降の場合、Spring 4.0の時点で、使用する必要があります
org.springframework.orm.hibernate4.LocalSessionFactoryBean

例えば:

<bean id="sessionFactory" 
      class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    ...
</bean>

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/orm/hibernate4/LocalSessionFactoryBean.html を参照してください

  • Hibernate 5.0/5.1/5.2の場合、Spring 4.3の時点では、代わりに
org.springframework.orm.hibernate5.LocalSessionFactoryBean

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/orm/hibernate5/LocalSessionFactoryBean.html を参照)

0
Yuci