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.