Avvio di Hibernate 5 con Spring

1. Panoramica

In questo articolo, discuteremo come avviare Hibernate 5 con Spring , utilizzando sia la configurazione Java che XML.

Questo articolo si concentra su Spring MVC. Il nostro articolo Spring Boot with Hibernate descrive come utilizzare Hibernate in Spring Boot.

2. Spring Integration

Il bootstrap di una SessionFactory con l'API nativa di Hibernate è un po 'complicato e richiederebbe parecchie righe di codice (dai un'occhiata alla documentazione ufficiale nel caso in cui ne avessi davvero bisogno).

Fortunatamente, Spring supporta il bootstrap di SessionFactory , quindi abbiamo bisogno solo di poche righe di codice Java o di configurazione XML.

3. Dipendenze di Maven

Iniziamo aggiungendo prima le dipendenze necessarie al nostro pom.xml :

 org.hibernate hibernate-core 5.4.2.Final 

Il modulo spring-orm fornisce l'integrazione Spring con Hibernate:

 org.springframework spring-orm 5.1.6.RELEASE 

Per semplicità, useremo H2 come nostro database:

 com.h2database h2 1.4.197 

Infine, utilizzeremo Tomcat JDBC Connection Pooling, che si adatta meglio per scopi di produzione rispetto a DriverManagerDataSource fornito da Spring:

 org.apache.tomcat tomcat-dbcp 9.0.1 

4. Configurazione

Come accennato prima, Spring ci supporta con il bootstrap di Hibernate SessionFactory .

Tutto quello che dobbiamo fare è definire alcuni bean e alcuni parametri .

Con Spring, abbiamo due opzioni per queste configurazioni , una basata su Java e una basata su XML.

4.1. Utilizzo della configurazione Java

Per l'utilizzo di Hibernate 5 con Spring, poco è cambiato da Hibernate 4: dobbiamo usare LocalSessionFactoryBean dal pacchetto org.springframework.orm.hibernate5 invece di org.springframework.orm.hibernate4 .

Come con Hibernate 4 prima, dobbiamo definire i bean per LocalSessionFactoryBean , DataSource e PlatformTransactionManager , oltre ad alcune proprietà specifiche di Hibernate.

Creiamo la nostra classe HibernateConfig per configurare 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. Utilizzo della configurazione XML

Come opzione secondaria, possiamo anche configurare Hibernate 5 con una configurazione basata su XML :

        create-drop   org.hibernate.dialect.H2Dialect              

Come possiamo facilmente vedere, stiamo definendo esattamente gli stessi bean e parametri della precedente configurazione basata su Java.

Per eseguire il bootstrap dell'XML nel contesto Spring , possiamo utilizzare un semplice file di configurazione Java se l'applicazione è configurata con la configurazione Java:

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

In alternativa, possiamo semplicemente fornire il file XML al contesto Spring, se la configurazione complessiva è puramente XML.

5. Utilizzo

A questo punto, Hibernate 5 è completamente configurato con Spring e possiamo iniettare direttamente Hibernate SessionFactory grezzo ogni volta che abbiamo bisogno di:

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

6. Database supportati

Sfortunatamente, il progetto Hibernate non fornisce esattamente un elenco ufficiale dei database supportati.

Detto questo, è facile vedere se un particolare tipo di database potrebbe essere supportato , possiamo dare un'occhiata all'elenco dei dialetti supportati.

7. Conclusione

In questo breve tutorial, abbiamo configurato Spring con Hibernate 5 , con configurazione sia Java che XML.

Come sempre, il codice sorgente completo degli esempi è disponibile su GitHub.