Você está com dificuldades para configurar o hibernate “puro” utilizando o Session Factory com o Spring? Neste artigo iremos mostrar a configuração para essa integração. Antes disso vamos aprender alguns conceitos importantes.
Session Factory ou Entity Manager Factory?
Basicamente podemos comparar o Session Factory e o Entity Manager Factory como equivalentes, no qual o Session é para o Hibernate e o Entity para o JPA, lembrando que o JPA é uma especificação e o Hibernate uma implementação.
Mãos no código!
Estou partindo do princípio que vocês já definiram suas dependências do spring e do hibernate, caso tenha alguma dúvida sobre isso deixe nos comentários. Chega de enrolação e vamos ao que importa.
Dependência do Basic Data Source no Maven
Adicione a dependência do Basic Data Source no seu arquivo pom.xml do maven
<dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency>
Criando Beans
Vamos criar os beans no arquivo de configuração do spring, mas que arquivo é esse? Nós estamos utilizando a configuração do spring com java config então você deve colocar esse bean dentro da classe que extends o WebMvcConfigurerAdapter beleza? Certo, então vamos criar um datasource com o código abaixo.
@Bean(name = "datasource") public static DataSource dataSource() { BasicDataSource ds = new BasicDataSource(); ds.setDriverClassName("org.postgresql.Driver"); ds.setUrl("jdbc:postgresql://localhost:5432/test_database"); ds.setUsername("postgres"); ds.setPassword(""); return ds; }
Feito isto vamos criar um bean para o Local Session Factory Bean
@Bean public LocalSessionFactoryBean sessionFactory() { LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); sessionFactory.setPackagesToScan(new String[]{"br.com.kelvinsantiago"}); sessionFactory.setHibernateProperties(hibernateProperties()); return sessionFactory; }
Agora vamos criar o nosso arquivo de properties da configuração do hibernate.
private Properties hibernateProperties() { Properties properties = new Properties(); properties.put("hibernate.dialect","org.hibernate.dialect.PostgreSQLDialect"); properties.put("hibernate.show_sql", true); properties.put("hibernate.hbm2ddl.auto","update"); return properties; }
E finalmente, nosso último bean, crie o bean do Hibernate Transaction Manager.
@Bean @Autowired public HibernateTransactionManager transactionManager(SessionFactory sessionFactory){ HibernateTransactionManager tx = new HibernateTransactionManager(); tx.setSessionFactory(sessionFactory); return tx; }
Arquivo final
Após ter criado todos os beans seu arquivo final de configuração do spring deve estar da seguinte maneira:
package br.com.kelvinsantiago.configuracao; import org.apache.commons.dbcp.BasicDataSource; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.orm.hibernate4.HibernateTransactionManager; import org.springframework.orm.hibernate4.LocalSessionFactoryBean; import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import javax.sql.DataSource; import java.util.Properties; @Configuration @EnableTransactionManagement @EnableWebMvc @ComponentScan(basePackages = {"br.com.kelvinsantiago"}) public class ConfiguracaoWeb extends WebMvcConfigurerAdapter { @Bean public LocalSessionFactoryBean sessionFactory() { LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); sessionFactory.setPackagesToScan(new String[]{"br.com.kelvinsantiago"}); sessionFactory.setHibernateProperties(hibernateProperties()); return sessionFactory; } private Properties hibernateProperties() { Properties properties = new Properties(); properties.put("hibernate.dialect","org.hibernate.dialect.PostgreSQLDialect"); properties.put("hibernate.show_sql", true); properties.put("hibernate.hbm2ddl.auto","update"); return properties; } @Bean @Autowired public HibernateTransactionManager transactionManager(SessionFactory sessionFactory){ HibernateTransactionManager tx = new HibernateTransactionManager(); tx.setSessionFactory(sessionFactory); return tx; } @Bean(name = "datasource") public static DataSource dataSource() { BasicDataSource ds = new BasicDataSource(); ds.setDriverClassName("org.postgresql.Driver"); ds.setUrl("jdbc:postgresql://localhost:5432/test_database"); ds.setUsername("postgres"); ds.setPassword(""); return ds; } }
Concluindo
Bom, chegamos ao fim desse tutorial, espero que essa dica tenha contribuído para seu conhecimento, caso tenha alguma dúvida ou até mesmo queira deixar um feedback, e que é muito importante para nós, utilize o formulário de comentários abaixo.