در این بخش به استفاده از Hibernate 5 به عنوان Persistence Agent میپردازیم
فراهم کردن ابجکتی از SessionFactory بوسیله Hibernate Native API نیاز به کد نویسی چند خط دارد و وقت گیر نیز است ولی با تنظیماتی که ما اعمال میکنیم میتوان آنرا ایجاد کرد
اضافه کردن کتابخانه های مورد نیاز :
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.4.2.Final</version> </dependency>
ماژول orm برای هماهنگ کردن Spring و Hibernate :
<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 Connection Pool که بهتر با محصول هماهنگ میشود را استفاده میکنیم
<dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-dbcp</artifactId> <version>9.0.1</version> </dependency>
ست کردن تنظیمات :
همانطور که قبلا اشاره کردیم Spring به ما کمک میکند که براحتی SessionFactory را ایجاد کنیم فقط کافی است تنظیماتی را اعمال کنیم و آنرا در قالب Bean دریافت کنیم :
تنظیمات بصورت کد جاوا :
تنظیمات Hibernate ورژن 5 از 4 کمی متفاوت است و ما از کلاس LocalSessionFactoryBean که در پکیج org.springframework.orm.hibernate5 قرار گرفته است استفاده خواهیم کرد در صورتی که در Hibernate 4 در پکیج org.springframework.orm.hibernate4 قرار دارد
همانند Hibernate 4 ما باید تنظیمات اولیه و Bean هایی از LocalSessionFactoryBean, DataSource و PlatformTransactionManager در کلاس Configuration ایجاد کنیم
@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;
}
}
روش ست کردن تنظیمات از طریق XML :
<?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>
و بعد برای اعمال کردن آن تنظیمات در کلاس Configuration بدین صورت عمل میکنیم :
@Configuration
@EnableTransactionManagement
@ImportResource({"classpath:hibernate5Configuration.xml"})
public class HibernateXMLConf {
//
}
استفاده از SessionFactory در قالب یک Bean :
public abstract class BarHibernateDAO {
@Autowired
private SessionFactory sessionFactory;
// ...
}
چه دیتابیس هایی میتوانند با Hibernate کار کنند ؟
متاسفانه تمامی دیتابیس ها در Hibernate پشتیبانی نمیشوند و میتوان از طریق این لینک به لیست دیتابیس های پشتیبانی شده دسترسی پیدا کرد