Самозагрузка Hibernate 5 с весны
1. обзор
В этой статье мы обсудим, как использоватьbootstrap Hibernate 5 with Spring, используя конфигурацию как Java, так и XML.
2. Весенняя интеграция
ЗагрузкаSessionFactory с помощью собственного Hibernate API немного сложна и потребует от нас довольно много строк кода (взгляните наofficial documentation, если вам действительно нужно это сделать).
К счастью,Spring supports bootstrapping the SessionFactory–, так что нам нужно всего несколько строк кода Java или конфигурации XML.
Кроме того, прежде чем мы начнем, если вы работаете со старыми версиями Hibernate, вы можете ознакомиться со статьями оHibernate 3, а также оHibernate 4 с Spring.
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, который лучше подходит для производственных целей, чемDriverManagerDataSource, предоставляемый Spring:
org.apache.tomcat
tomcat-dbcp
9.0.1
4. конфигурация
Как упоминалось ранее, Spring поддерживает нас загрузкой HibernateSessionFactory.
Все, что нам нужно сделать, этоdefine some beans as well as a few parameters.
В Spring у нас естьtwo options for these configurations, основанный на Java и XML.
4.1. Использование конфигурации Java
Для использования Hibernate 5 с Spring мало что изменилось со времениHibernate 4: мы должны использоватьLocalSessionFactoryBean из пакетаorg.springframework.orm.hibernate5 вместоorg.springframework.orm.hibernate4.
Как и в случае с Hibernate 4 ранее, мы должны определить beans дляLocalSessionFactoryBean,DataSource иPlatformTransactionManager, а также некоторые свойства, специфичные для 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
В качестве дополнительного варианта мы также можемconfigure Hibernate 5 with an XML-based configuration:
create-drop
org.hibernate.dialect.H2Dialect
Как мы легко можем видеть, мы определяем точно такие же bean-компоненты и параметры, что и ранее в конфигурации на основе Java.
To bootstrap the XML into the Spring context, мы можем использовать простой файл конфигурации Java, если приложение настроено с конфигурацией Java:
@Configuration
@EnableTransactionManagement
@ImportResource({"classpath:hibernate5Configuration.xml"})
public class HibernateXMLConf {
//
}
В качестве альтернативы, мы можем просто предоставить XML-файл в контекст Spring, если общая конфигурация является чисто XML.
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.