Bootstrapping Hibernate 5 con Spring

1. Información general

En este artículo, discutiremos cómo arrancar Hibernate 5 con Spring , usando la configuración Java y XML.

Este artículo se centra en Spring MVC. Nuestro artículo Spring Boot con Hibernate describe cómo usar Hibernate en Spring Boot.

2. Integración de primavera

Bootstrapping a SessionFactory con la API nativa de Hibernate es un poco complicado y nos llevaría bastantes líneas de código (eche un vistazo a la documentación oficial en caso de que realmente necesite hacer eso).

Afortunadamente, Spring admite el arranque de SessionFactory , por lo que solo necesitamos unas pocas líneas de código Java o configuración XML.

3. Dependencias de Maven

Comencemos agregando primero las dependencias necesarias a nuestro pom.xml :

 org.hibernate hibernate-core 5.4.2.Final 

El módulo spring-orm proporciona la integración Spring con Hibernate:

 org.springframework spring-orm 5.1.6.RELEASE 

En aras de la simplicidad, usaremos H2 como nuestra base de datos:

 com.h2database h2 1.4.197 

Finalmente, vamos a utilizar Tomcat JDBC Connection Pooling, que se adapta mejor a los fines de producción que DriverManagerDataSource proporcionado por Spring:

 org.apache.tomcat tomcat-dbcp 9.0.1 

4. Configuración

Como se mencionó anteriormente, Spring nos apoya con el arranque de Hibernate SessionFactory .

Todo lo que tenemos que hacer es definir algunos beans y algunos parámetros .

Con Spring, tenemos dos opciones para estas configuraciones , una forma basada en Java y otra basada en XML.

4.1. Usando la configuración de Java

Para usar Hibernate 5 con Spring, poco ha cambiado desde Hibernate 4: tenemos que usar LocalSessionFactoryBean del paquete org.springframework.orm.hibernate5 en lugar de org.springframework.orm.hibernate4 .

Al igual que con Hibernate 4 antes, tenemos que definir beans para LocalSessionFactoryBean , DataSource y PlatformTransactionManager , así como algunas propiedades específicas de Hibernate.

Creemos nuestra clase HibernateConfig para configurar Hibernate 5 con Spring :

@Configuration @EnableTransactionManagement public class HibernateConf { @Bean public LocalSessionFactoryBean sessionFactory() { LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); sessionFactory.setPackagesToScan( {"com.baeldung.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. Usar configuración XML

Como opción secundaria, también podemos configurar Hibernate 5 con una configuración basada en XML :

        create-drop   org.hibernate.dialect.H2Dialect              

Como podemos ver fácilmente, estamos definiendo exactamente los mismos beans y parámetros que en la configuración basada en Java anteriormente.

Para iniciar el XML en el contexto de Spring , podemos usar un archivo de configuración de Java simple si la aplicación está configurada con la configuración de Java:

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

Alternativamente, podemos simplemente proporcionar el archivo XML al Spring Context, si la configuración general es puramente XML.

5. Uso

En este punto, Hibernate 5 está completamente configurado con Spring, y podemos inyectar la SessionFactory de Hibernate directamente siempre que necesitemos:

public abstract class BarHibernateDAO { @Autowired private SessionFactory sessionFactory; // ... }

6. Bases de datos compatibles

Desafortunadamente, el proyecto Hibernate no proporciona exactamente una lista oficial de bases de datos compatibles.

Dicho esto, es fácil ver si un tipo de base de datos en particular podría ser compatible , podemos echar un vistazo a la lista de dialectos compatibles.

7. Conclusión

En este tutorial rápido, configuramos Spring con Hibernate 5 , con configuración Java y XML.

Como siempre, el código fuente completo de los ejemplos está disponible en GitHub.