Springを使用したHibernate5のブートストラップ
1. 概要
この記事では、JavaとXML構成の両方を使用して、Hibernate5をSpringでブートストラップする方法について説明します。
この記事では、SpringMVCに焦点を当てています。 私たちの記事Hibernateを使用したSpringBootでは、SpringBootでHibernateを使用する方法について説明しています。
2. 春の統合
ネイティブのHibernateAPIを使用したSessionFactoryのブートストラップは少し複雑で、かなりの数行のコードが必要になります(本当に必要な場合は、公式ドキュメントを参照してください)。 )。
幸い、SpringはSessionFactory – のブートストラップをサポートしているため、数行のJavaコードまたはXML構成のみが必要です。
3. Mavenの依存関係
まず、必要な依存関係をpom.xmlに追加することから始めましょう。
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.2.Final</version>
</dependency>
spring-ormモジュールは、HibernateとのSpring統合を提供します。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>
簡単にするために、データベースとしてH2を使用します。
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.197</version>
</dependency>
最後に、 Tomcat JDBC接続プールを使用します。これは、Springが提供するDriverManagerDataSourceよりも本番環境に適しています。
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-dbcp</artifactId>
<version>9.0.1</version>
</dependency>
4. 構成
前述のように、SpringはHibernate SessionFactoryのブートストラップでサポートしてくれます。
私たちがしなければならないのは、いくつかのBeanといくつかのパラメーターを定義することです。
Springでは、これらの構成に対して、JavaベースとXMLベースの2つのオプションがあります。
4.1. Java構成の使用
SpringでHibernate5を使用する場合、 Hibernate4からほとんど変更されていません。パッケージorg.springframework.orm.hibernate5のLocalSessionFactoryBeanを[ X202X]org.springframework.orm.hibernate4。
以前のHibernate4と同様に、 LocalSessionFactoryBean 、 DataSource 、 PlatformTransactionManager のBean、およびいくつかのHibernate固有のプロパティを定義する必要があります。
HibernateConfig クラスを作成して、Springを使用してHibernate5を構成しましょう。
@Configuration
@EnableTransactionManagement
public class HibernateConf {
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setPackagesToScan(
{"com.baeldung.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番目のオプションとして、XMLベースの構成でHibernate5を構成することもできます:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="...">
<bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource"
ref="dataSource"/>
<property name="packagesToScan"
value="com.baeldung.hibernate.bootstrap.model"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">
create-drop
</prop>
<prop key="hibernate.dialect">
org.hibernate.dialect.H2Dialect
</prop>
</props>
</property>
</bean>
<bean id="dataSource"
class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource">
<property name="driverClassName" value="org.h2.Driver"/>
<property name="url" value="jdbc:h2:mem:db;DB_CLOSE_DELAY=-1"/>
<property name="username" value="sa"/>
<property name="password" value="sa"/>
</bean>
<bean id="txManager"
class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
</beans>
簡単にわかるように、以前のJavaベースの構成とまったく同じBeanとパラメーターを定義しています。
XMLをSpringコンテキストにブートストラップするために、アプリケーションがJava構成で構成されている場合は、単純なJava構成ファイルを使用できます。
@Configuration
@EnableTransactionManagement
@ImportResource({"classpath:hibernate5Configuration.xml"})
public class HibernateXMLConf {
//
}
または、全体的な構成が純粋にXMLである場合は、単純にXMLファイルをSpringContextに提供することもできます。
5. 使用法
この時点で、Hibernate 5はSpringで完全に構成されており、必要なときにいつでも生のHibernateSessionFactoryを直接注入できます。
public abstract class BarHibernateDAO {
@Autowired
private SessionFactory sessionFactory;
// ...
}
6. サポートされているデータベース
残念ながら、Hibernateプロジェクトは、サポートされているデータベースの公式リストを正確に提供していません。
そうは言っても、特定のデータベースタイプがサポートされているかどうかは簡単にわかります。サポートされている方言のリストを見ることができます。
7. 結論
このクイックチュートリアルでは、SpringをHibernate5で構成しました–JavaとXMLの両方の構成で。
いつものように、例の完全なソースコードは、GitHubでから入手できます。