1. 개요

이 기사에서는 Java 및 XML 구성을 모두 사용하여 Spring과 함께 Hibernate 5부트스트랩 하는 방법에 대해 논의할 것 입니다.

이 기사는 Spring MVC에 초점을 맞춥니다. 우리 기사  Spring Boot with Hibernate  는 Spring Boot에서 Hibernate 를 사용하는 방법을 설명합니다.

2. 스프링 통합

기본 Hibernate API를 사용하여 SessionFactory부트스트랩하는 것은 약간 복잡하고 몇 줄의 코드가 필요합니다(정말 필요한 경우 공식 문서 를 참조하십시오).

다행히, Spring 지원은 부트 스트랩 SessionFactory를 - 우리는 자바 코드 또는 XML 구성의 몇 줄 필요가 그래서.

3. 메이븐 의존성

먼저 pom.xml에 필요한 의존성을 추가하여 시작하겠습니다 .

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

스프링 ORM 모듈은 최대 절전 모드로 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>

마지막으로 Spring에서 제공 하는 DriverManagerDataSource 보다 프로덕션 목적에 더 적합한 Tomcat JDBC Connection Pooling 을 사용할 것입니다 .

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

4. 구성

앞서 언급했듯이 Spring은 Hibernate SessionFactory 를 부트스트래핑하는 것을 지원합니다 .

우리가 해야 할 일은 몇 가지 매개변수뿐만 아니라 몇 가지 빈정의 하는 것입니다 .

Spring을 사용하면 이러한 구성 에 대해 Java 기반 및 XML 기반 방식의 두 가지 옵션이 있습니다 .

4.1. 자바 구성 사용

Spring과 함께 Hibernate 5 를 사용하기 위해 Hibernate 4 이후로 거의 변경되지 않았다 . 우리는 org.springframework.orm.hibernate4 대신에 org.springframework.orm.hibernate5 패키지에서 LocalSessionFactoryBean 을 사용해야 한다 .

이전의 Hibernate 4와 마찬가지로 우리는 LocalSessionFactoryBean , DataSource , PlatformTransactionManager에 대한 빈 과 일부 Hibernate 특정 속성 을 정의해야 합니다.

Spring으로 Hibernate 5설정 하기 위해 HibernateConfig 클래스를 생성하자 :

@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 구성 사용

보조 옵션 으로 XML 기반 구성으로 Hibernate 5를 구성 할 수도 있습니다 .

<?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 기반 구성에서와 정확히 동일한 빈과 매개변수를 정의하고 있습니다.

XML을 Spring 컨텍스트로 부트스트랩하기 위해 애플리케이션이 Java 구성으로 구성된 경우 간단한 Java 구성 파일을 사용할 수 있습니다.

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

또는 전체 구성이 순수하게 XML인 경우 XML 파일을 Spring 컨텍스트에 제공할 수 있습니다.

5. 사용법

이 시점에서 Hibernate 5는 Spring으로 완전히 구성되었으며 다음이 필요할 때마다 원시 Hibernate SessionFactory를 직접 주입 할 수 있습니다 .

public abstract class BarHibernateDAO {

    @Autowired
    private SessionFactory sessionFactory;

    // ...
}

6. 지원되는 데이터베이스

불행히도 Hibernate 프로젝트는 지원되는 데이터베이스의 공식 List을 정확히 제공하지 않습니다.

, 특정 데이터베이스 유형이 지원되는지 여부를 쉽게 알 수 있습니다 . 지원되는 방언 List을 볼 수 있습니다 .

7. 결론

이 빠른 사용방법(예제)에서는 Java 및 XML 구성을 모두 사용 하여 Hibernate 5로 Spring을 구성했습니다.

항상 그렇듯이 예제의 전체 소스 코드는 GitHub에서 사용할 수 있습니다 .

Persistence footer banner