Spring中如何配置Hibernate事务

为了保证数据的一致性,在编程的时候往往需要引入事务这个概念。事务有4个特性:原子性、一致性、隔离性、持久性。

事务的种类有两种:编程式事务和声明式事务。编程式事务就是将事务处理放在程序中,而声明式事务则是通过配置文件或者注解进行操作。

在Spring中有声明式事务的概念,通过和Hibernate类似框架的集成,可以很好的完成声明式事务。

其实,不论在Spring中有几种配置Hibernate事务的方法,都逃不出一下几条:

1.配置SessionFactory

2.配置事务容器

3.配置事务规则

4.配置事务入口

后面一共为大家提供4种配置Hibernate事务的方法。

首先说下配置SessionFactory,配置SessionFactory有两种方式,一种是通过配置hibernate.cfg.xml文件的位置来配置SessionFactory,另一种就是在Spring配置文件中,手动配置数据源。

下面是两种配置SessionFactory的方式(第二种配置需要额外引入两个包:commons-dbcp、commons-pool)

<!-- 1、第一种配置SessionFactory的方式 -->
 <bean
 >
  <property value="classpath:hibernate.cfg.xml" />
 </bean>
 
 <!-- 2、第二种配置SessionFactory的方式 -->
 <!-- 2.1配置数据源 -->
 <bean
  destroy-method="close">
  <property value="com.mysql.jdbc.Driver"></property>
  <property value="jdbc:mysql://localhost:3306/hibernate_cache"></property>
  <property value="root"></property>
  <property value="admin"></property>
 </bean>
 <!-- 2.2、配置SessionFactory -->
 <bean
 >
  <property ref="dataSource"></property>
  <property>
   <props>
    <prop key="hibernate.hbm2ddl.auto">update</prop>
   </props>
  </property>
  <property>
   <list>
    <value>classpath:实体对应xml的路径</value>
   </list>
  </property>
 </bean>

至此Hibernate就成功的将SessionFactory交给了Spring来管理。现在再来看Spring是怎样管理Hibernate事务的吧。

第一种方式,利用tx标签配置事务。

<!-- 配置事务容器 -->
 <bean
 >
  <property ref="sessionFactory" />
 </bean>
 <!-- 定义事务规则 -->
 <tx:advice transaction-manager="transactionManager">
  <tx:attributes>
   <tx:method propagation="REQUIRED" />
   <tx:method propagation="REQUIRED" />
   <tx:method propagation="REQUIRED" />
   <tx:method propagation="REQUIRED" read-only="true" />
  </tx:attributes>
 </tx:advice>
 <!-- 定义事务入口 -->
 <aop:config>
  <aop:pointcut expression="execution(* com.jianxin.dao.*.*(..))" />
  <aop:advisor advice-ref="txAdvice" pointcut-ref="allDaoMethod" />
 </aop:config>

第二种,用代理进行配置

<!-- 配置事务容器 -->
 <bean
 >
  <property ref="sessionFactory" />
 </bean>
 <!-- 定义事务规则 -->
 <bean
 
  abstract="true">
  <property ref="transactionManager" />
  <property>
   <props>
    <!-- ,回滚为-,不回滚为+ -->
    <prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>
    <prop key="modify*">PROPAGATION_REQUIRED,+MyException</prop>
    <prop key="del*">PROPAGATION_REQUIRED</prop>
    <prop key="*">READONLY</prop>
   </props>
  </property>
 </bean>
 <!-- 定义事务入口 -->
 <bean parent="transactionProxy">
  <property ref="userDao"></property>
 </bean>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/1daf6bdd8f07b522fbf2f4e2d2eb2960.html