SpringでHibernate 5をブートストラップする
1. 概要
この記事では、JavaとXMLの両方の構成を使用してbootstrap Hibernate 5 with Springを実行する方法について説明します。
2. 春の統合
ネイティブのHibernateAPIを使用してSessionFactoryをブートストラップするのは少し複雑で、かなりの数行のコードが必要になります(本当に必要な場合は、official documentationを確認してください)。
幸い、Spring supports bootstrapping the SessionFactory–であるため、必要なのは数行のJavaコードまたはXML構成のみです。
また、ジャンプする前に、古いバージョンのHibernateを使用している場合は、SpringのHibernate 3とHibernate 4に関する記事を参照してください。
3. Mavenの依存関係
まず、必要な依存関係をpom.xmlに追加することから始めましょう。
org.hibernate
hibernate-core
5.4.2.Final
spring-orm moduleは、SpringとHibernateの統合を提供します。
org.springframework
spring-orm
5.1.6.RELEASE
簡単にするために、データベースとしてH2を使用します。
com.h2database
h2
1.4.197
最後に、Tomcat JDBC Connection Poolingを使用します。これは、Springが提供するDriverManagerDataSourceよりも本番環境に適しています。
org.apache.tomcat
tomcat-dbcp
9.0.1
4. 設定
前に述べたように、SpringはHibernateSessionFactoryのブートストラップで私たちをサポートしています。
私たちがしなければならないのはdefine some beans as well as a few parametersにすることだけです。
Springには、JavaベースとXMLベースの方法であるtwo options for these configurationsがあります。
4.1. Java構成の使用
SpringでHibernate5を使用する場合、Hibernate 4以降ほとんど変更されていません。org.springframework.orm.hibernate4の代わりにパッケージorg.springframework.orm.hibernate5のLocalSessionFactoryBeanを使用する必要があります。
以前のHibernate4と同様に、LocalSessionFactoryBean、DataSource、およびPlatformTransactionManagerのBeanと、いくつかのHibernate固有のプロパティを定義する必要があります。
HibernateConfigクラスをconfigure 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. XML設定の使用
2番目のオプションとして、configure Hibernate 5 with an XML-based configurationを実行することもできます。
create-drop
org.hibernate.dialect.H2Dialect
簡単にわかるように、以前のJavaベースの構成とまったく同じBeanとパラメーターを定義しています。
To bootstrap the XML into the Spring context、アプリケーションがJava構成で構成されている場合は、単純なJava構成ファイルを使用できます。
@Configuration
@EnableTransactionManagement
@ImportResource({"classpath:hibernate5Configuration.xml"})
public class HibernateXMLConf {
//
}
あるいは、全体的な構成が純粋にXMLである場合、XMLファイルをSpring Contextに単純に提供できます。
5. 使用法
この時点で、Hibernate 5はSpringで完全に構成されており、必要なときにいつでも直接inject the raw Hibernate SessionFactoryを実行できます。
public abstract class BarHibernateDAO {
@Autowired
private SessionFactory sessionFactory;
// ...
}
6. サポートされているデータベース
残念ながら、Hibernateプロジェクトは、サポートされているデータベースの公式リストを正確に提供していません。
そうは言っても、it’s easy to see if a particular database type might be supported、list of supported dialectsを見ることができます。
7. 結論
このクイックチュートリアルでは、we configured Spring with Hibernate 5 –JavaとXMLの両方の構成を使用します。
いつものように、例の完全なソースコードはover on GitHubで入手できます。