در این بخش به استفاده از 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 پشتیبانی نمیشوند و میتوان از طریق این لینک به لیست دیتابیس های پشتیبانی شده دسترسی پیدا کرد