Bootstrapping Hibernate 5 mit Spring

Bootstrapping Hibernate 5 mit Spring

1. Überblick

In diesem Artikel wird erläutert, wiebootstrap Hibernate 5 with Spring mithilfe der Java- und XML-Konfiguration verwendet werden.

2. Frühlingsintegration

Das Bootstrapping vonSessionFactory mit der nativen Hibernate-API ist etwas kompliziert und würde einige Codezeilen erfordern (sehen Sie sich dieofficial documentation an, falls Sie dies wirklich tun müssen).

GlücklicherweiseSpring supports bootstrapping the SessionFactory, so dass wir nur wenige Zeilen Java-Code oder XML-Konfiguration benötigen.

Wenn Sie mit älteren Versionen von Hibernate arbeiten, können Sie sich vor dem Einstieg die Artikel zuHibernate 3 sowieHibernate 4 mit Spring ansehen.

3. Maven-Abhängigkeiten

Beginnen wir damit, dass wir zuerst die erforderlichen Abhängigkeiten zu unserenpom.xml hinzufügen:


    org.hibernate
    hibernate-core
    5.4.2.Final

spring-orm module bietet die Spring-Integration mit Hibernate:


    org.springframework
    spring-orm
    5.1.6.RELEASE

Der Einfachheit halber verwenden wirH2 als Datenbank:


    com.h2database
    h2
    1.4.197

Schließlich werden wirTomcat JDBC Connection Pooling verwenden, was für Produktionszwecke besser geeignet ist als die von Spring bereitgestelltenDriverManagerDataSource:


    org.apache.tomcat
    tomcat-dbcp
    9.0.1

4. Aufbau

Wie bereits erwähnt, unterstützt uns Spring beim Bootstrapping der HibernateSessionFactory.

Alles was wir tun müssen istdefine some beans as well as a few parameters.

Mit Spring haben wirtwo options for these configurations, eine Java-basierte und eine XML-basierte Methode.

4.1. Verwenden der Java-Konfiguration

Für die Verwendung von Hibernate 5 mit Spring hat sich seitHibernate 4 wenig geändert: Wir müssenLocalSessionFactoryBean aus dem Paketorg.springframework.orm.hibernate5 anstelle vonorg.springframework.orm.hibernate4 verwenden.

Wie bei Hibernate 4 zuvor müssen wir Beans fürLocalSessionFactoryBean,DataSource undPlatformTransactionManager sowie einige Hibernate-spezifische Eigenschaften definieren.

Erstellen wir unsereHibernateConfig-Klasse zuconfigure 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. Verwenden der XML-Konfiguration

Als sekundäre Option können wir auchconfigure Hibernate 5 with an XML-based configuration:




    
        
        
        
            
                
                    create-drop
                
                
                    org.hibernate.dialect.H2Dialect
                
            
        
    

    
        
        
        
        
    

    
        
    

Wie wir leicht sehen können, definieren wir genau die gleichen Beans und Parameter wie in der Java-basierten Konfiguration zuvor.

To bootstrap the XML into the Spring context können wir eine einfache Java-Konfigurationsdatei verwenden, wenn die Anwendung mit Java-Konfiguration konfiguriert ist:

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

Alternativ können wir einfach die XML-Datei für den Spring Context bereitstellen, wenn die Gesamtkonfiguration rein XML ist.

5. Verwendungszweck

Zu diesem Zeitpunkt ist Hibernate 5 vollständig mit Spring konfiguriert, und wir könneninject the raw Hibernate SessionFactory direkt, wann immer wir müssen:

public abstract class BarHibernateDAO {

    @Autowired
    private SessionFactory sessionFactory;

    // ...
}

6. Unterstützte Datenbanken

Leider enthält das Hibernate-Projekt nicht genau eine offizielle Liste der unterstützten Datenbanken.

Davon abgesehen,it’s easy to see if a particular database type might be supported, können wir uns dielist of supported dialects ansehen.

7. Fazit

In diesem kurzen Tutorialwe configured Spring with Hibernate 5 - mit Java- und XML-Konfiguration.

Wie immer ist der vollständige Quellcode der Beispieleover on GitHub verfügbar.