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
1 2 3 4 5 |
<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.
1 2 3 4 5 6 7 8 9 10 |
@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
1 2 3 4 5 6 7 8 |
@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.
1 2 3 4 5 6 7 |
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.
1 2 3 4 5 6 7 |
@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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
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.