Inicializando o Hibernate 5 com Spring

Inicializando o Hibernate 5 com Spring

1. Visão geral

Neste artigo, discutiremos comobootstrap Hibernate 5 with Spring, usando a configuração Java e XML.

2. Integração Spring

Inicializar aSessionFactory com a API nativa do Hibernate é um pouco complicado e nos levaria algumas linhas de código (dê uma olhada emofficial documentation caso você realmente precise fazer isso).

Felizmente,Spring supports bootstrapping the SessionFactory, precisamos apenas de algumas linhas de código Java ou configuração XML.

Além disso, antes de começarmos, se você estiver trabalhando com versões mais antigas do Hibernate, poderá dar uma olhada nos artigos sobreHibernate 3, bem comoHibernate 4 com Spring.

3. Dependências do Maven

Vamos começar adicionando primeiro as dependências necessárias ao nossopom.xml:


    org.hibernate
    hibernate-core
    5.4.2.Final

Ospring-orm module fornece a integração Spring com o Hibernate:


    org.springframework
    spring-orm
    5.1.6.RELEASE

Por uma questão de simplicidade, usaremosH2 como nosso banco de dados:


    com.h2database
    h2
    1.4.197

Por fim, vamos usarTomcat JDBC Connection Pooling, que se encaixa melhor para fins de produção do queDriverManagerDataSource fornecidos pelo Spring:


    org.apache.tomcat
    tomcat-dbcp
    9.0.1

4. Configuração

Como mencionado antes, o Spring nos ajuda com a inicialização do HibernateSessionFactory.

Tudo o que precisamos fazer édefine some beans as well as a few parameters.

Com o Spring, temostwo options for these configurations, uma forma baseada em Java e outra baseada em XML.

4.1. Usando a configuração Java

Para usar o Hibernate 5 com Spring, pouca coisa mudou desdeHibernate 4: temos que usarLocalSessionFactoryBean do pacoteorg.springframework.orm.hibernate5 em vez deorg.springframework.orm.hibernate4.

Como com o Hibernate 4 antes, temos que definir beans paraLocalSessionFactoryBean,DataSource ePlatformTransactionManager, bem como algumas propriedades específicas do Hibernate.

Vamos criar nossa classeHibernateConfig paraconfigure Hibernate 5 with Spring:

@Configuration
@EnableTransactionManagement
public class HibernateConf {

    @Bean
    public LocalSessionFactoryBean sessionFactory() {
        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        sessionFactory.setPackagesToScan(
          {"com.example.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. Usando configuração XML

Como opção secundária, também podemosconfigure Hibernate 5 with an XML-based configuration:




    
        
        
        
            
                
                    create-drop
                
                
                    org.hibernate.dialect.H2Dialect
                
            
        
    

    
        
        
        
        
    

    
        
    

Como podemos ver facilmente, estamos definindo exatamente os mesmos beans e parâmetros da configuração anterior baseada em Java.

To bootstrap the XML into the Spring context, podemos usar um arquivo de configuração Java simples se o aplicativo estiver configurado com a configuração Java:

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

Como alternativa, podemos simplesmente fornecer o arquivo XML para o Spring Context, se a configuração geral for puramente XML.

5. Uso

Neste ponto, o Hibernate 5 está totalmente configurado com Spring, e podemosinject the raw Hibernate SessionFactory diretamente sempre que precisarmos:

public abstract class BarHibernateDAO {

    @Autowired
    private SessionFactory sessionFactory;

    // ...
}

6. Bancos de dados suportados

Infelizmente, o projeto Hibernate não fornece exatamente uma lista oficial de bancos de dados suportados.

Dito isso,it’s easy to see if a particular database type might be supported, podemos dar uma olhada emlist of supported dialects.

7. Conclusão

Neste tutorial rápido,we configured Spring with Hibernate 5 - com configuração Java e XML.

Como sempre, o código-fonte completo dos exemplos está disponívelover on GitHub.