1. 概要

この記事では、JavaとXML構成の両方を使用して、Hibernate5をSpringでブートストラップする方法について説明します。

この記事では、SpringMVCに焦点を当てています。 私たちの記事Hibernateを使用したSpringBootでは、SpringBootでHibernateを使用する方法について説明しています。

2. 春の統合

ネイティブのHibernateAPIを使用したSessionFactoryのブートストラップは少し複雑で、かなりの数行のコードが必要になります(本当に必要な場合は、公式ドキュメントを参照してください)。 )。

幸い、SpringはSessionFactory のブートストラップをサポートしているため、数行のJavaコードまたはXML構成のみが必要です。

3. Mavenの依存関係

まず、必要な依存関係をpom.xmlに追加することから始めましょう。

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

spring-ormモジュールは、HibernateとのSpring統合を提供します。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>5.1.6.RELEASE</version>
</dependency>

簡単にするために、データベースとしてH2を使用します。

<dependency>
    <groupId>com.h2database</groupId> 
    <artifactId>h2</artifactId>
    <version>1.4.197</version>
</dependency>

最後に、 Tomcat JDBC接続プールを使用します。これは、Springが提供するDriverManagerDataSourceよりも本番環境に適しています。

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

4. 構成

前述のように、SpringはHibernate SessionFactoryのブートストラップでサポートしてくれます。

私たちがしなければならないのは、いくつかのBeanといくつかのパラメーターを定義することです。

Springでは、これらの構成に対して、JavaベースとXMLベースの2つのオプションがあります。

4.1. Java構成の使用

SpringでHibernate5を使用する場合、 Hibernate4からほとんど変更されていません。パッケージorg.springframework.orm.hibernate5LocalSessionFactoryBeanを[ X202X]org.springframework.orm.hibernate4。

以前のHibernate4と同様に、 LocalSessionFactoryBean DataSource PlatformTransactionManager のBean、およびいくつかのHibernate固有のプロパティを定義する必要があります。

HibernateConfig クラスを作成して、Springを使用してHibernate5を構成しましょう。

@Configuration
@EnableTransactionManagement
public class HibernateConf {

    @Bean
    public LocalSessionFactoryBean sessionFactory() {
        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        sessionFactory.setPackagesToScan(
          {"com.baeldung.hibernate.bootstrap.model" });
        sessionFactory.setHibernateProperties(hibernateProperties());

        return sessionFactory;
    }

    @Bean
    public DataSource dataSource() {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("org.h2.Driver");
        dataSource.setUrl("jdbc:h2:mem:db;DB_CLOSE_DELAY=-1");
        dataSource.setUsername("sa");
        dataSource.setPassword("sa");

        return dataSource;
    }

    @Bean
    public PlatformTransactionManager hibernateTransactionManager() {
        HibernateTransactionManager transactionManager
          = new HibernateTransactionManager();
        transactionManager.setSessionFactory(sessionFactory().getObject());
        return transactionManager;
    }

    private final Properties hibernateProperties() {
        Properties hibernateProperties = new Properties();
        hibernateProperties.setProperty(
          "hibernate.hbm2ddl.auto", "create-drop");
        hibernateProperties.setProperty(
          "hibernate.dialect", "org.hibernate.dialect.H2Dialect");

        return hibernateProperties;
    }
}

4.2. XML構成の使用

2番目のオプションとして、XMLベースの構成でHibernate5を構成することもできます

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="...">

    <bean id="sessionFactory" 
      class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" 
          ref="dataSource"/>
        <property name="packagesToScan" 
          value="com.baeldung.hibernate.bootstrap.model"/>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.hbm2ddl.auto">
                    create-drop
                </prop>
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.H2Dialect
                </prop>
            </props>
        </property>
    </bean>

    <bean id="dataSource" 
      class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource">
        <property name="driverClassName" value="org.h2.Driver"/>
        <property name="url" value="jdbc:h2:mem:db;DB_CLOSE_DELAY=-1"/>
        <property name="username" value="sa"/>
        <property name="password" value="sa"/>
    </bean>

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

簡単にわかるように、以前のJavaベースの構成とまったく同じBeanとパラメーターを定義しています。

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

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

または、全体的な構成が純粋にXMLである場合は、単純にXMLファイルをSpringContextに提供することもできます。

5. 使用法

この時点で、Hibernate 5はSpringで完全に構成されており、必要なときにいつでも生のHibernateSessionFactoryを直接注入できます。

public abstract class BarHibernateDAO {

    @Autowired
    private SessionFactory sessionFactory;

    // ...
}

6. サポートされているデータベース

残念ながら、Hibernateプロジェクトは、サポートされているデータベースの公式リストを正確に提供していません。

そうは言っても、特定のデータベースタイプがサポートされているかどうかは簡単にわかります。サポートされている方言のリストを見ることができます。

7. 結論

このクイックチュートリアルでは、SpringをHibernate5で構成しました–JavaとXMLの両方の構成で。

いつものように、例の完全なソースコードは、GitHubから入手できます。