程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Spring與Hibernate整合事務治理的懂得

Spring與Hibernate整合事務治理的懂得

編輯:關於JAVA

Spring與Hibernate整合事務治理的懂得。本站提示廣大學習愛好者:(Spring與Hibernate整合事務治理的懂得)文章只能為提供參考,不一定能成為您想要的結果。以下是Spring與Hibernate整合事務治理的懂得正文


 在談Spring事務治理之前我們想一下在我們不消Spring的時刻,在Hibernate中我們是怎樣停止數據操作的。在Hibernate中我們每次停止一個操作的的時刻我們都是要先開啟事務,然落後行數據操作,然後提交事務,封閉事務,我們如許做的緣由是由於Hibernate默許的事務主動提交是false,他是須要我們工資的手動提交事務,假設你不想每次都手動提交事務的話,你可以在hibernate.cfg.xml我文件中把它設置為事務主動提交:

xml代碼

 <property name="defaultAutoCommit"> 
   <value>false</value> 
 </property> 
 

即使我們把它的事務提交方法設置為主動,它可以停止數據操作,然則如許其實不知足我們現實的營業需求,由於有時刻在我保留一個數據以後,我願望他能持續保留另外一條數據,我願望在保留完兩條或許多條以後一路停止事務提交,如許即便失足,我們可以回滾,取保數據的分歧性,要末都勝利要末都掉敗,這時候候我們就不克不及每保留完一條數據以後事務就主動提交,由於如許它們不在統一個事務傍邊,我們不克不及包管數據的分歧行。所以這時候候我們就須要手動的來設置裝備擺設我們的事務,這就須要用到Spring為Hibernate供給的事務治理機制,Spring供給的事務治理可以分為兩類:編程式的和聲明式的,編程式,其實就是在代碼外面來掌握,像Hibernate操作數據一樣,開啟事務,提交事務,這類方法有必定的局限性,所以我們普通是用聲明式來設置裝備擺設我們的事務。

聲明式事務設置裝備擺設重要分以下幾步:

1、聲明式事務設置裝備擺設

  (1) 設置裝備擺設事務治理器;

  (2)事務的流傳特征;

  (3)那些類那些辦法應用事務。

<!-- 設置裝備擺設事務治理器 指定其感化的sessionFactory把事務交給Spring行止理 --> 
 
  <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
  <property name="sessionFactory"> 
      <ref bean="sessionFactory"/> 
  </property> 
  </bean> 
 
<!-- 設置裝備擺設事務的流傳特征 --> 
  <tx:advice id="txAdvice" transaction-manager="transactionManager"> 
  <tx:attributes> 
  <tx:method name="save*" propagation="REQUIRED"/> 
  <tx:method name="delete*" propagation="REQUIRED"/> 
  <tx:method name="update*" propagation="REQUIRED"/> 
  <tx:method name="get*" read-only="true" propagation="NOT_SUPPORTED"/> 
  <tx:method name="*" read-only="true"/> 
  </tx:attributes> 
  </tx:advice> 
 
<!-- 那些類的哪些辦法介入事務 --> 
  <aop:config> 
  <aop:pointcut id="allServiceMethod" expression="execution(* com.coe.service.*.*(..))"/> 
  <aop:advisor pointcut-ref="allServiceMethod" advice-ref="txAdvice"/> 
  </aop:config>

  我們在設置裝備擺設事務的時刻,我們普通是把事務界限設置到service層,也就是你的營業邏輯層,由於我們許多時刻都是在我們的營業邏輯層來完成我們一些列的數據操作,假如放到Dao數據層,其粒度太小了。別的,假如我們把事務設置裝備擺設在營業邏輯層的話,對我們的二級緩存也是有利益的,這個年夜家今後現實操作的時刻會發明。

2、編寫營業邏輯辦法

      這時候候我們便可以在我們營業邏輯層用HibernateTemplate外面供給的數據操作辦法來編寫我們的營業邏輯辦法了,固然我們的辦法必需如果以我們事務設置裝備擺設外面設置裝備擺設的一樣,用save,delete,update,get做我們的辦法的開首。須要留意的是,默許情形下運轉期異常才會回滾(包含繼續了RuntimeException子類),通俗異常是不會滾的。

最初我們趁便總結一下事務的幾種流傳特征:

1. PROPAGATION_REQUIRED: 假如存在一個事務,則支撐以後事務。假如沒有事務則開啟;

2. PROPAGATION_SUPPORTS: 假如存在一個事務,支撐以後事務。假如沒有事務,則非事務的履行;

3. PROPAGATION_MANDATORY: 假如曾經存在一個事務,支撐以後事務。假如沒有一個運動的事務,則拋出異常;

4. PROPAGATION_REQUIRES_NEW: 老是開啟一個新的事務。假如一個事務曾經存在,則將這個存在的事務掛起;

5. PROPAGATION_NOT_SUPPORTED: 老是非事務地履行,並掛起任何存在的事務;

6. PROPAGATION_NEVER: 老是非事務地履行,假如存在一個運動事務,則拋出異常;

7. PROPAGATION_NESTED:假如一個運動的事務存在,則運轉在一個嵌套的事務中. 假如沒有運動事務, 則按TransactionDefinition.PROPAGATION_REQUIRED 屬性履行。

 經由過程本文願望能贊助年夜家對Spring 和Hibernate 的整合事務治理的懂得,感謝年夜家對本站的支撐!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved