Leitfaden für den Winterschlaf 4 mit Frühling

Anleitung zu Hibernate 4 mit Spring

1. Überblick

Dieser Artikel konzentriert sich auf das Einrichten vonHibernate 4 with Spring. Wir werden untersuchen, wie Spring mit Hibernate 4 mithilfe der Java- und XML-Konfiguration konfiguriert wird. Teile dieses Prozesses sind natürlichthe Hibernate 3 article gemeinsam.

2. Maven

Informationen zum Hinzufügen der Spring Persistence-Abhängigkeiten zum Projektpom.xml finden Sie unterarticle focused on the Spring and Maven dependencies.

In Ruhezustand 4 sind die Maven-Abhängigkeiten einfach:


   org.hibernate
   hibernate-core
   4.3.6.Final

Damit Hibernate sein Proxy-Modell verwenden kann, benötigen wir außerdem den Javassist:


   org.javassist
   javassist
   3.18.2-GA

Und da wir MySQL für dieses Tutorial verwenden, benötigen wir außerdem:


   mysql
   mysql-connector-java
   5.1.32
   runtime

Und schließlich verwenden wir ein richtigesconnection pool anstelle der Nur-Entwickler-Spring-Implementierung - dasDriverManagerDataSource. Wir verwenden hier dieTomcat JDBC Connection Pool:


    org.apache.tomcat
    tomcat-dbcp
    7.0.55

3. Java Federkonfiguration für den Ruhezustand 4

UmHibernate 4 in a project zu verwenden, haben sich auf der Konfigurationsseite einige Dinge geändert, wenn Sie von einem Hibernate 3-Setup wechseln.

Der Hauptaspekt, der sich beim Upgrade von Hibernate 3 unterscheidet, ist die Art und Weise, wieSessionFactory with Hibernate 4 erstellt werden.

Dies erfolgt jetzt unter Verwendung derLocalSessionFactoryBean aus demhibernate4-Paket, die die älterenAnnotationSessionFactoryBean aus demhibernate3-Paket ersetzen. Das neueFactoryBean hat die gleiche Verantwortung - es bootet dasSessionFactory vom Anmerkungsscannen. Dies ist erforderlich, da ab Hibernate 3.6 die altenAnnotationConfigurationwas merged inConfiguration und somit die neuen Hibernate 4LocalSessionFactoryBean diesen neuenConfiguration-Mechanismus verwenden.

Es ist auch erwähnenswert, dass im Ruhezustand 4 die Methode und der MechanismusConfiguration.buildSessionFactoryhave also been deprecatedin favor vonConfiguration.buildSessionFactory(ServiceRegistry) - die die FederLocalSessionFactoryBean noch nicht verwendet.

Die Spring Java-Konfiguration für Hibernate 4:

@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:persistence-mysql.properties" })
@ComponentScan({ "org.example.spring.persistence" })
public class PersistenceConfig {

   @Autowired
   private Environment env;

   @Bean
   public LocalSessionFactoryBean sessionFactory() {
      LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
      sessionFactory.setDataSource(restDataSource());
      sessionFactory.setPackagesToScan(
        new String[] { "org.example.spring.persistence.model" });
      sessionFactory.setHibernateProperties(hibernateProperties());

      return sessionFactory;
   }

   @Bean
   public DataSource restDataSource() {
      BasicDataSource dataSource = new BasicDataSource();
      dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
      dataSource.setUrl(env.getProperty("jdbc.url"));
      dataSource.setUsername(env.getProperty("jdbc.user"));
      dataSource.setPassword(env.getProperty("jdbc.pass"));

      return dataSource;
   }

   @Bean
   @Autowired
   public HibernateTransactionManager transactionManager(
     SessionFactory sessionFactory) {

      HibernateTransactionManager txManager
       = new HibernateTransactionManager();
      txManager.setSessionFactory(sessionFactory);

      return txManager;
   }

   @Bean
   public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
      return new PersistenceExceptionTranslationPostProcessor();
   }

   Properties hibernateProperties() {
      return new Properties() {
         {
            setProperty("hibernate.hbm2ddl.auto",
              env.getProperty("hibernate.hbm2ddl.auto"));
            setProperty("hibernate.dialect",
              env.getProperty("hibernate.dialect"));
            setProperty("hibernate.globally_quoted_identifiers",
             "true");
         }
      };
   }
}

4. XML Spring-Konfiguration für den Ruhezustand 4

In ähnlicher Weise gilt auchHibernate 4 can be configured with XML:




    
    
    
        
            ${hibernate.hbm2ddl.auto}
            ${hibernate.dialect}
        
    



    
    
    
    



    


Um das XML in den Spring-Kontext zu booten, können wir eine einfache Java-Konfigurationsdatei verwenden, wenn die Anwendung mit Java-Konfiguration konfiguriert ist:

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

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

Für beide Konfigurationstypen werden die spezifischen Eigenschaften von JDBC und Ruhezustand in einer Eigenschaftendatei gespeichert:

# jdbc.X
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_hibernate_dev?createDatabaseIfNotExist=true
jdbc.user=tutorialuser
jdbc.pass=tutorialmy5ql

# hibernate.X
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql=false
hibernate.hbm2ddl.auto=create-drop

5. Spring, Hibernate und MySQL

Die von Hibernatehave been extensively discussed für Hibernate 3 unterstützten Treiber und Dialekte - und alles gilt auch für Hibernate 4.

6. Verwendungszweck

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

public abstract class BarHibernateDAO{

   @Autowired
   SessionFactory sessionFactory;

   ...

   protected Session getCurrentSession(){
      return sessionFactory.getCurrentSession();
   }
}

Ein wichtiger Hinweis hierbei ist, dass dies jetzt die empfohlene Methode zur Verwendung der Hibernate-API ist. Die älterenHibernateTemplate sind nicht mehr im neuenorg.springframework.orm.hibernate4-Paket enthalten, da sie nicht mit Hibernate 4 verwendet werden sollten.

7. Fazit

In diesem Beispielwe configured Spring with Hibernate 4 - sowohl mit Java- als auch mit XML-Konfiguration.

Wie immer ist der in diesem Artikel vorgestellte Codeover on Github verfügbar. Dies ist ein Maven-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein.