«1. Обзор

В этой статье мы обсудим, как загрузить Hibernate 5 с помощью Spring, используя конфигурацию Java и XML.

Эта статья посвящена Spring MVC. В нашей статье Spring Boot with Hibernate описывается, как использовать Hibernate в Spring Boot.

2. Интеграция с Spring

Начальная загрузка SessionFactory с собственным Hibernate API немного сложна и потребует от нас немало строк кода (посмотрите официальную документацию, если вам действительно нужно это сделать).

К счастью, 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 обеспечивает интеграцию Spring с Hibernate:

<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 Connection Pooling, который лучше подходит для производственных целей, чем DriverManagerDataSource, предоставляемый Spring:

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

~ ~~ 4. Конфигурация

Как упоминалось ранее, Spring поддерживает загрузку Hibernate SessionFactory.

Все, что нам нужно сделать, это определить некоторые bean-компоненты, а также несколько параметров.

В Spring у нас есть два варианта этих конфигураций: на основе Java и на основе XML.

4.1. Использование конфигурации Java

Для использования Hibernate 5 с Spring мало что изменилось по сравнению с Hibernate 4: мы должны использовать LocalSessionFactoryBean из пакета org.springframework.orm.hibernate5 вместо org.springframework.orm.hibernate4.

Как и в случае с Hibernate 4 ранее, мы должны определить bean-компоненты для LocalSessionFactoryBean, DataSource и PlatformTransactionManager, а также некоторые свойства, специфичные для Hibernate.

Давайте создадим наш класс HibernateConfig для настройки Hibernate 5 с помощью Spring:

@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

В качестве вторичного варианта мы также можем настроить Hibernate 5 с конфигурацией на основе XML: на основе конфигурации ранее.

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

Чтобы загрузить XML в контекст Spring, мы можем использовать простой файл конфигурации Java, если приложение сконфигурировано с конфигурацией Java:

В качестве альтернативы, мы можем просто предоставить файл XML контексту Spring, если общая конфигурация является чисто XML.

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

5. Использование

На данный момент Hibernate 5 полностью настроен с помощью Spring, и мы можем вставлять необработанную Hibernate SessionFactory напрямую, когда нам нужно:

6. Поддерживаемые базы данных

public abstract class BarHibernateDAO {

    @Autowired
    private SessionFactory sessionFactory;

    // ...
}

К сожалению, проект Hibernate точно не предоставляет официальный список поддерживаемых баз данных.

При этом легко увидеть, поддерживается ли конкретный тип базы данных, мы можем взглянуть на список поддерживаемых диалектов.

7. Заключение

В этом кратком руководстве мы настроили Spring с помощью Hibernate 5 — с конфигурацией Java и XML.

Как всегда, полный исходный код примеров доступен на GitHub.

«