春の休止状態4へのガイド
1概要
この記事では、
Hibernate 4とSpring
のセットアップに焦点を当てます。JavaとXMLの両方の構成を使用して、Hibernate 4でSpringを構成する方法について説明します。このプロセスの一部はリンクするのが一般的です:/hibernate3-spring[Hibernate 3の記事]。
2 Maven
Spring Persistence依存関係を
pom.xml
プロジェクトに追加するには、リンク:/spring-with-maven#persistence[SpringとMavenの依存関係に焦点を当てた記事]を参照してください。
Hibernate 4を続けると、Mavenの依存関係は簡単です。
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.6.Final</version>
</dependency>
それから、Hibernateがそのプロキシモデルを使用することを可能にするために、私たちは同様にjavassistを必要とします:
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.18.2-GA</version>
</dependency>
このチュートリアルではMySQLを使用するので、次のものも必要になります。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
<scope>runtime</scope>
</dependency>
そして最後に、開発専用のSpring実装である
DriverManagerDataSource
ではなく、適切な
接続プール
を使用しています。ここではhttp://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html[Tomcat JDBC接続プール]を使用しています。
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-dbcp</artifactId>
<version>7.0.55</version>
</dependency>
3 Java
Hibernate 4用のSpring構成
-
プロジェクトで** Hibernate 4を使用するために、Hibernate 3の設定から移行する際に設定面でいくつかのことが変更されました。
Hibernate 3からアップグレードするときに異なる主な点は、Hibernate 4
で
SessionFactory
を作成する方法です。
これは、
hibernate4
パッケージの
LocalSessionFactoryBean
を使用することによって行われます。これは、
hibernate3
パッケージの古い
AnnotationSessionFactoryBean
を置き換えます。新しい
FactoryBean
にも同じ責任があります – アノテーションスキャンから
SessionFactory
をブートストラップします。これは、Hibernate 3.6から、古い
AnnotationConfiguration
https://hibernate.atlassian.net/browse/HHH-5375が
Configuration
にマージされ、新しいHibernate 4の
LocalSessionFactoryBean
がこの新しい
Configuration
メカニズムを使用しているためです。
Hibernate 4では、
Configuration.buildSessionFactory
メソッドとメカニズムhttps://hibernate.atlassian.net/browse/HHH-5991[廃止予定]も使用されています]
http://stackoverflow.com/questions/8621906
Configuration.buildSessionFactory(ServiceRegistry)
の/is-buildsessionfactory-deprecated-in-hibernate-4[Spring
LocalSessionFactoryBean
]はまだ使用されていません。
Hibernate 4用のSpring Java設定:
@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:persistence-mysql.properties" })
@ComponentScan({ "org.baeldung.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.baeldung.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もXML
で設定できます。
<context:property-placeholder location="classpath:persistence-mysql.properties"/>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="org.baeldung.spring.persistence.model"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
</props>
</property>
</bean>
<bean id="dataSource"
class="org.apache.tomcat.dbcp.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.pass}"/>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="persistenceExceptionTranslationPostProcessor"
class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
XMLをSpringコンテキストにブートストラップするために、アプリケーションがJava設定で設定されている場合は単純なJava設定ファイルを使用できます。
@Configuration
@EnableTransactionManagement
@ImportResource({ "classpath:hibernate4Config.xml" })
public class HibernateXmlConfig{
//}
あるいは、全体的な設定が純粋にXMLの場合は、単純にXMLファイルをSpringコンテキストに渡すことができます。
どちらの種類の設定でも、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でサポートされているドライバと方言
広く議論されています
– Hibernate 3用 – そしてHibernate 4にもすべて当てはまる
6. 使用法
この時点で、Hibernate 4はSpringで完全に設定されており、次のことが必要なときはいつでも
生の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. 結論
この例では、
SpringとHibernate 4
をJavaとXMLの両方で構成しました。
いつものように、この記事で紹介したコードはhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-hibernate4[Githubで利用可能]です。これはMavenベースのプロジェクトなので、そのままインポートして実行するのは簡単なはずです。