春の休止状態4へのガイド

SpringでのHibernate 4のガイド

1. 概要

この記事では、Hibernate 4 with Springの設定に焦点を当てます。JavaとXMLの両方の構成を使用してHibernate4でSpringを構成する方法を見ていきます。 もちろん、このプロセスの一部はthe Hibernate 3 articleに共通です。

2. メーベン

Spring Persistenceの依存関係をプロジェクトpom.xmlに追加するには、article focused on the Spring and Maven dependenciesを参照してください。

Hibernate 4を継続すると、Mavenの依存関係は単純です。


   org.hibernate
   hibernate-core
   4.3.6.Final

次に、Hibernateがプロキシモデルを使用できるようにするには、javassistも必要です。


   org.javassist
   javassist
   3.18.2-GA

また、このチュートリアルではMySQLを使用するため、次のものも必要です。


   mysql
   mysql-connector-java
   5.1.32
   runtime

そして最後に、開発専用のSpring実装の代わりに適切なconnection poolを使用しています–DriverManagerDataSource。 ここではTomcat JDBC Connection Poolを使用しています。


    org.apache.tomcat
    tomcat-dbcp
    7.0.55

3. Java Hibernate4のSpring構成

Hibernate 4 in a projectを使用するために、Hibernate 3セットアップから移行するときに、構成側でいくつかの変更が行われました。

Hibernate 3からアップグレードするときに異なる主な側面は、SessionFactory with Hibernate 4を作成する方法です。

これは、hibernate4パッケージのLocalSessionFactoryBeanを使用して実行されるようになりました。これにより、hibernate3パッケージの古いAnnotationSessionFactoryBeanが置き換えられます。 新しいFactoryBeanにも同じ責任があります。つまり、注釈スキャンからSessionFactoryをブートストラップします。 これが必要なのは、Hibernate 3.6以降、古いAnnotationConfigurationwas mergedConfigurationになり、新しいHibernate 4LocalSessionFactoryBeanがこの新しいConfigurationメカニズムを使用しているためです。

また、Hibernate 4では、Configuration.buildSessionFactoryメソッドとメカニズムhave also been deprecatedin favor ofConfiguration.buildSessionFactory(ServiceRegistry) – SpringLocalSessionFactoryBeanがまだ使用していないことにも注意してください。

Hibernate 4のSpring Java構成:

@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. Hibernate 4のXML Spring設定

同様に、Hibernate 4 can be configured with XMLも同様です。




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



    
    
    
    



    


XMLをSpring Contextにブートストラップするために、アプリケーションがJava構成で構成されている場合、単純なJava構成ファイルを使用できます。

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

あるいは、全体的な構成が純粋にXMLである場合、XMLファイルをSpring Contextに単純に提供できます。

どちらのタイプの構成でも、JDBCおよびHibernate固有のプロパティはプロパティファイルに保存されます。

# 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、およびMySQL

Hibernate 3のHibernatehave been extensively discussedでサポートされているドライバーと方言–そしてすべてがHibernate4にも適用されます。

6. 使用法

この時点で、Hibernate 4はSpringで完全に構成されており、必要なときにいつでも直接inject the raw Hibernate SessionFactoryを実行できます。

public abstract class BarHibernateDAO{

   @Autowired
   SessionFactory sessionFactory;

   ...

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

ここで重要な注意点は、これがHibernate APIを使用するための推奨される方法であるということです。古いHibernateTemplateは、Hibernate 4で使用されるべきではないため、新しいorg.springframework.orm.hibernate4パッケージに含まれなくなりました。

7. 結論

この例では、we configured Spring with Hibernate 4 –JavaとXMLの両方の構成を使用しています。

いつものように、この記事で紹介されているコードはover on Githubで利用できます。 これはMavenベースのプロジェクトであるため、インポートしてそのまま実行するのは簡単です。