歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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 id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="configLocation" value="classpath:hibernate.cfg.xml" />
 </bean>
 
 <!-- 2、第二種配置SessionFactory的方式 -->
 <!-- 2.1配置數據源 -->
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
  destroy-method="close">
  <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
  <property name="url" value="jdbc:mysql://localhost:3306/hibernate_cache"></property>
  <property name="username" value="root"></property>
  <property name="password" value="admin"></property>
 </bean>
 <!-- 2.2、配置SessionFactory -->
 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource" ref="dataSource"></property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.hbm2ddl.auto">update</prop>
   </props>
  </property>
  <property name="mappingLocations">
   <list>
    <value>classpath:實體對應xml的路徑</value>
   </list>
  </property>
 </bean>

至此Hibernate就成功的將SessionFactory交給了Spring來管理。現在再來看Spring是怎樣管理Hibernate事務的吧。

第一種方式,利用tx標簽配置事務。

 <!-- 配置事務容器 -->
 <bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
 </bean>
 <!-- 定義事務規則 -->
 <tx:advice id="txAdvice" transaction-manager="transactionManager">
  <tx:attributes>
   <tx:method name="add*" propagation="REQUIRED" />
   <tx:method name="modify*" propagation="REQUIRED" />
   <tx:method name="del*" propagation="REQUIRED" />
   <tx:method name="*" propagation="REQUIRED" read-only="true" />
  </tx:attributes>
 </tx:advice>
 <!-- 定義事務入口 -->
 <aop:config>
  <aop:pointcut id="allDaoMethod" expression="execution(* com.jianxin.dao.*.*(..))" />
  <aop:advisor advice-ref="txAdvice" pointcut-ref="allDaoMethod" />
 </aop:config>

第二種,用代理進行配置

 <!-- 配置事務容器 -->
 <bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
 </bean>
 <!-- 定義事務規則 -->
 <bean id="transactionProxy"
  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
  abstract="true">
  <property name="transactionManager" ref="transactionManager" />
  <property name="transactionAttributes">
   <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 id="userDaoProxy" parent="transactionProxy">
  <property name="target" ref="userDao"></property>
 </bean>

更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2013-12/93681p2.htm

Hibernate 的詳細介紹:請點這裡
Hibernate 的下載地址:請點這裡

Hibernate 中文手冊 PDF http://www.linuxidc.com/Linux/2013-10/91208.htm

Copyright © Linux教程網 All Rights Reserved