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.