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.


