IK.AM

@making's tech note


Spring3.1とHibernate4.1への移行

🗃 {Programming/Java/org/springframework/orm/hibernate4}
🗓 Updated at 2012-04-09T19:33:59Z  🗓 Created at 2012-04-09T19:33:59Z   🌎 English Page

本記事は「MIGRATING TO SPRING 3.1 AND HIBERNATE 4.1」の翻訳です。

間違いの指摘は@makingまで。


Core-Spring courseの一環として、私たちは一緒に春とJPA / Hibernateを統合する方法を示すために使用するラボ·アプリケーションを持っています。 私達はちょうどSpring 3.1 / Hibernateの4.1にそれをアップグレードし、我々はいくつかのヒントを共有するべきだと考えています。

1) Mavenの依存関係

以下の設定例は、Maven(ただし、必要に応じて、用意にGradle用に変換できます)に基づいています。 POMの中で、SpringやHibernate(使用してるSpringコンポーネントに応じてより多くのSpringの依存関係を宣言する必要があります)の最新バージョンを指定する必要があります。

<dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-orm</artifactId>
     <version>3.1.1.RELEASE</version>
     <!-- will come with all needed Spring dependencies such as spring-core and spring-beans-->
</dependency>
<dependency>
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-entitymanager</artifactId>
     <version>4.1.1.Final</version>
     <!-- will come with Hibernate core-->
</dependency>
<dependency>
     <groupId>cglib</groupId>
     <artifactId>cglib</artifactId>
     <version>2.1</version>
</dependency>

CGLIBへの依存関係は、必ずしも必要ではありません。このブログエントリの最後にそのことについての詳細があります。

2) HibernateのSpring設定

Springは、Hibernateのいくつかのバージョンのサポートを提供しますので、使用しているバージョンを明示的に指定する必要があります。

Hibernate4では

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

Hibernate3で動作させたい場合は、代わりに次の設定をしてください。

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

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

(パッケージのパスは、Hibernate3またはHibernate4を使用するかどうかに応じて異なります)

Hibernateを使用する場合、マッピングを記述する2つの一般的な方法があります。XMLとアノテーションです。

SpringとHibernate3の連携では2種類のSessionFactoryBeanを設定できます。 XMLマッピングのみ設定できるLocalSessionFactoryBeanと、 XMLマッピングおよび/またはアノテーションベースのマッピングを設定できるAnnotationSessionFactoryBean

Spring 3.1とHibernate 4では単純になります。LocalSessionFactoryBeanと呼ばれるSessionFactoryBeanだけがあります。 これは、アノテーションベースのマッピングおよびXMLベースのマッピングの両方で動作します。

慎重にこれらの2つの手順に従っている場合は、すでにアプリケーションは動作していることでしょう。

3)CGLIBへの依存関係は必要か?

答えは"はい"である可能性が高いです。それはSpringがhood(訳注:slang?)の下でそれを必要とすることは一般的です。いくつかの例を挙げます。

  • Javaによる設定(詳細はこちら)
  • インターフェースを実装していないSpring Beanへの、トランザクション制御、セキュリティ、キャッシングなどの機能追加(詳細はこちら)
  • @TransactionalアノテーションがJUnitテスト·ケースで使用される場合(通常は、各テストケースの終了時にデータベースのトランザクションをロールバックさせるために行います。詳細はこちら)。

など

注:CGLIBメンテナンスされていないプロジェクトです。SpringはSpring 3.2の開始とともに(その詳細については、関連するJIRAの課題を参照してください)​​、代替としてJavassistに移行している可能性があります。ですからSpring 3.2からは、CGLIBの代わりにJavassistの依存関係を追加することができるはずです。

4) Javaの設定

SpringでのJavaの設定の使用は、XMLベースとアノテーションベースの設定に対する興味深い代替手段です。 それでは、SpringとHibernateを、Javaの設定によって動作させるにはどうしたらよいでしょうか? LocalSessionFactoryBuilderと呼ばれる新しいクラスのおかげで、かなり容易になります。

@Bean
public SessionFactory sessionFactory() {
 return new LocalSessionFactoryBuilder(dataSource())
 .addAnnotatedClasses(Person.class, Account.class)
 .buildSessionFactory();
}

LocalSessionFactoryBuilderは、Hibernate自体の設定クラスのサブクラスであり、名前が示すように、Springの@Configurationがついたクラス内で使用するために便利なビルダースタイルのAPIを提供しています。


✒️️ Edit  ⏰ History  🗑 Delete