開発者ドキュメント

春の休止状態4へのガイド


1概要

この記事では、

Hibernate 4とSpring

のセットアップに焦点を当てます。JavaとXMLの両方の構成を使用して、Hibernate 4でSpringを構成する方法について説明します。このプロセスの一部はリンクするのが一般的です:/hibernate3-spring[Hibernate 3の記事]。


2 Maven

Spring Persistence依存関係を

pom.xml

プロジェクトに追加するには、リンク:/spring-with-maven#persistence[SpringとMavenの依存関係に焦点を当てた記事]を参照してください。

Hibernate 4を続けると、Mavenの依存関係は簡単です。

<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-core</artifactId>
   <version>4.3.6.Final</version>
</dependency>

それから、Hibernateがそのプロキシモデルを使用することを可能にするために、私たちは同様にjavassistを必要とします:

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

このチュートリアルではMySQLを使用するので、次のものも必要になります。

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.32</version>
   <scope>runtime</scope>
</dependency>

そして最後に、開発専用のSpring実装である

DriverManagerDataSource

ではなく、適切な

接続プール

を使用しています。ここではhttp://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html[Tomcat JDBC接続プール]を使用しています。

<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-dbcp</artifactId>
    <version>7.0.55</version>
</dependency>


3 Java


Hibernate 4用のSpring構成

  • プロジェクトで** Hibernate 4を使用するために、Hibernate 3の設定から移行する際に設定面でいくつかのことが変更されました。

Hibernate 3からアップグレードするときに異なる主な点は、Hibernate 4




SessionFactory

を作成する方法です。

これは、


hibernate4


パッケージの

LocalSessionFactoryBean

を使用することによって行われます。これは、


hibernate3


パッケージの古い


AnnotationSessionFactoryBean


を置き換えます。新しい

FactoryBean

にも同じ責任があります – アノテーションスキャンから

SessionFactory

をブートストラップします。これは、Hibernate 3.6から、古い

AnnotationConfiguration


https://hibernate.atlassian.net/browse/HHH-5375が


Configuration

にマージされ、新しいHibernate 4の

LocalSessionFactoryBean

がこの新しい

Configuration

メカニズムを使用しているためです。

Hibernate 4では、

Configuration.buildSessionFactory

メソッドとメカニズムhttps://hibernate.atlassian.net/browse/HHH-5991[廃止予定]も使用されています]

http://stackoverflow.com/questions/8621906


Configuration.buildSessionFactory(ServiceRegistry)

の/is-buildsessionfactory-deprecated-in-hibernate-4[Spring

LocalSessionFactoryBean

]はまだ使用されていません。

Hibernate 4用のSpring Java設定:

@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:persistence-mysql.properties" })
@ComponentScan({ "org.baeldung.spring.persistence" })
public class PersistenceConfig {

   @Autowired
   private Environment env;

   @Bean
   public LocalSessionFactoryBean sessionFactory() {
      LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
      sessionFactory.setDataSource(restDataSource());
      sessionFactory.setPackagesToScan(
        new String[]{ "org.baeldung.spring.persistence.model" });
      sessionFactory.setHibernateProperties(hibernateProperties());

      return sessionFactory;
   }

   @Bean
   public DataSource restDataSource() {
      BasicDataSource dataSource = new BasicDataSource();
      dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
      dataSource.setUrl(env.getProperty("jdbc.url"));
      dataSource.setUsername(env.getProperty("jdbc.user"));
      dataSource.setPassword(env.getProperty("jdbc.pass"));

      return dataSource;
   }

   @Bean
   @Autowired
   public HibernateTransactionManager transactionManager(
     SessionFactory sessionFactory) {

      HibernateTransactionManager txManager
       = new HibernateTransactionManager();
      txManager.setSessionFactory(sessionFactory);

      return txManager;
   }

   @Bean
   public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
      return new PersistenceExceptionTranslationPostProcessor();
   }

   Properties hibernateProperties() {
      return new Properties() {
         {
            setProperty("hibernate.hbm2ddl.auto",
              env.getProperty("hibernate.hbm2ddl.auto"));
            setProperty("hibernate.dialect",
              env.getProperty("hibernate.dialect"));
            setProperty("hibernate.globally__quoted__identifiers",
             "true");
         }
      };
   }
}

** 4 Hibernate 4用のXML Spring設定

**

同様に、

Hibernate 4もXML

で設定できます。

<context:property-placeholder location="classpath:persistence-mysql.properties"/>

<bean id="sessionFactory"
  class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="packagesToScan" value="org.baeldung.spring.persistence.model"/>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
            <prop key="hibernate.dialect">${hibernate.dialect}</prop>
        </props>
    </property>
</bean>

<bean id="dataSource"
  class="org.apache.tomcat.dbcp.dbcp.BasicDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.user}"/>
    <property name="password" value="${jdbc.pass}"/>
</bean>

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

<bean id="persistenceExceptionTranslationPostProcessor"
  class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

XMLをSpringコンテキストにブートストラップするために、アプリケーションがJava設定で設定されている場合は単純なJava設定ファイルを使用できます。

@Configuration
@EnableTransactionManagement
@ImportResource({ "classpath:hibernate4Config.xml" })
public class HibernateXmlConfig{
  //}

あるいは、全体的な設定が純粋にXMLの場合は、単純にXMLファイルをSpringコンテキストに渡すことができます。

どちらの種類の設定でも、JDBCおよびHibernate固有のプロパティはプロパティファイルに格納されます。

# jdbc.X
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring__hibernate__dev?createDatabaseIfNotExist=true
jdbc.user=tutorialuser
jdbc.pass=tutorialmy5ql

# hibernate.X
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.show__sql=false
hibernate.hbm2ddl.auto=create-drop


5 Spring、Hibernate、そしてMySQL

Hibernateでサポートされているドライバと方言

広く議論されています

– Hibernate 3用 – そしてHibernate 4にもすべて当てはまる


6. 使用法

この時点で、Hibernate 4はSpringで完全に設定されており、次のことが必要なときはいつでも

生のHibernate

SessionFactory


を直接注入できます。

public abstract class BarHibernateDAO{

   @Autowired
   SessionFactory sessionFactory;

   ...

   protected Session getCurrentSession(){
      return sessionFactory.getCurrentSession();
   }
}

ここで重要な注意点は、これがHibernate APIを使用するための推奨される方法になったことです。古い

HibernateTemplate

は、Hibernate 4では使用する必要がないため、新しい

org.springframework.orm.hibernate4

パッケージに含まれなくなりました。


7. 結論

この例では、

SpringとHibernate 4

をJavaとXMLの両方で構成しました。

いつものように、この記事で紹介したコードはhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-hibernate4[Githubで利用可能]です。これはMavenベースのプロジェクトなので、そのままインポートして実行するのは簡単なはずです。

モバイルバージョンを終了