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 mergedがConfigurationになり、新しい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ベースのプロジェクトであるため、インポートしてそのまま実行するのは簡単です。