---
title: Spring3.1とHibernate4.1への移行
tags: []
categories: ["Programming", "Java", "org", "springframework", "orm", "hibernate4"]
date: 2012-04-09T19:33:59Z
updated: 2012-04-09T19:33:59Z
---

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

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

----

[Core-Spring course][3]の一環として、私たちは一緒に春と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による設定(詳細は[こちら][4])
  - インターフェースを実装していないSpring Beanへの、トランザクション制御、セキュリティ、キャッシングなどの機能追加(詳細は[こちら][5])
  - `@Transactional`アノテーションがJUnitテスト·ケースで使用される場合（通常は、各テストケースの終了時にデータベースのトランザクションをロールバックさせるために行います。詳細は[こちら][6]）。

など

注：CGLIBメンテナンスされていないプロジェクトです。SpringはSpring 3.2の開始とともに（その詳細については、関連する[JIRAの課題を][7]参照してください）​​、代替として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を提供しています。


  [1]: http://blog.springsource.org/2012/04/06/migrating-to-spring-3-1-and-hibernate-4-1/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:%20SpringSourceTeamBlog%20%28SpringSource%20Team%20Blog%29
  [2]: http://twitter.com/#!/making
  [3]: http://www.springsource.com/training/course?courseID=17750
  [4]: http://blog.springsource.org/2009/12/22/configuration-simplifications-in-spring-3-0/
  [5]: http://static.springsource.org/spring/docs/current/spring-framework-reference/html/aop.html
  [6]: http://static.springsource.org/spring/docs/current/spring-framework-reference/html/testing.html
  [7]: https://jira.springsource.org/browse/SPR-5654
