Démarrer Hibernate 5 avec Spring

Démarrer Hibernate 5 avec Spring

1. Vue d'ensemble

Dans cet article, nous allons expliquer commentbootstrap Hibernate 5 with Spring, en utilisant à la fois la configuration Java et XML.

2. Intégration Spring

Amorcer unSessionFactory avec l'API native Hibernate est un peu compliqué et nous prendrait pas mal de lignes de code (jetez un œil auxofficial documentation au cas où vous auriez vraiment besoin de le faire).

Heureusement,Spring supports bootstrapping the SessionFactory donc nous n'avons besoin que de quelques lignes de code Java ou de configuration XML.

De plus, avant de nous lancer, si vous travaillez avec des versions plus anciennes d'Hibernate, vous pouvez consulter les articles surHibernate 3 ainsi que surHibernate 4 avec Spring.

3. Dépendances Maven

Commençons par ajouter d'abord les dépendances nécessaires à nospom.xml:


    org.hibernate
    hibernate-core
    5.4.2.Final

Lespring-orm module fournit l'intégration Spring avec Hibernate:


    org.springframework
    spring-orm
    5.1.6.RELEASE

Par souci de simplicité, nous utiliseronsH2 comme base de données:


    com.h2database
    h2
    1.4.197

Enfin, nous allons utiliserTomcat JDBC Connection Pooling, qui convient mieux à des fins de production que lesDriverManagerDataSource fournis par Spring:


    org.apache.tomcat
    tomcat-dbcp
    9.0.1

4. Configuration

Comme mentionné précédemment, Spring nous aide à démarrer le HibernateSessionFactory.

Tout ce que nous avons à faire est dedefine some beans as well as a few parameters.

Avec Spring, nous avonstwo options for these configurations, une méthode basée sur Java et une méthode basée sur XML.

4.1. Utilisation de la configuration Java

Pour utiliser Hibernate 5 avec Spring, peu de choses ont changé depuisHibernate 4: nous devons utiliserLocalSessionFactoryBean du packageorg.springframework.orm.hibernate5 au lieu deorg.springframework.orm.hibernate4.

Comme avec Hibernate 4 auparavant, nous devons définir des beans pourLocalSessionFactoryBean,DataSource etPlatformTransactionManager, ainsi que certaines propriétés spécifiques à Hibernate.

Créons notre classeHibernateConfig versconfigure 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. Utilisation de la configuration XML

En option secondaire, nous pouvons égalementconfigure Hibernate 5 with an XML-based configuration:




    
        
        
        
            
                
                    create-drop
                
                
                    org.hibernate.dialect.H2Dialect
                
            
        
    

    
        
        
        
        
    

    
        
    

Comme nous pouvons facilement le voir, nous définissons exactement les mêmes beans et paramètres que dans la configuration basée sur Java précédemment.

To bootstrap the XML into the Spring context, nous pouvons utiliser un simple fichier de configuration Java si l'application est configurée avec une configuration Java:

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

Alternativement, nous pouvons simplement fournir le fichier XML au contexte Spring, si la configuration globale est purement XML.

5. Usage

À ce stade, Hibernate 5 est entièrement configuré avec Spring, et nous pouvonsinject the raw Hibernate SessionFactory directement chaque fois que nous avons besoin de:

public abstract class BarHibernateDAO {

    @Autowired
    private SessionFactory sessionFactory;

    // ...
}

6. Bases de données supportées

Malheureusement, le projet Hibernate ne fournit pas exactement une liste officielle des bases de données prises en charge.

Cela étant dit,it’s easy to see if a particular database type might be supported, nous pouvons jeter un œil auxlist of supported dialects.

7. Conclusion

Dans ce tutoriel rapide,we configured Spring with Hibernate 5 - avec une configuration Java et XML.

Comme toujours, le code source complet des exemples est disponibleover on GitHub.