一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Spring與Hibernate整合事務管理的理解

Spring與Hibernate整合事務管理的理解

2020-06-17 12:35鬼球_Li JAVA教程

這篇文章主要介紹了Spring與Hibernate整合事務管理的理解的相關資料,需要的朋友可以參考下

 在談Spring事務管理之前我們想一下在我們不用Spring的時候,在Hibernate中我們是怎么進行數據操作的。在Hibernate中我們每次進行一個操作的的時候我們都是要先開啟事務,然后進行數據操作,然后提交事務,關閉事務,我們這樣做的原因是因為Hibernate默認的事務自動提交是false,他是需要我們人為的手動提交事務,假如你不想每次都手動提交事務的話,你可以在hibernate.cfg.xml我文件中把它設置為事務自動提交:

xml代碼

?
1
2
3
4
<property name="defaultAutoCommit">
  <value>false</value>
</property>

縱然我們把它的事務提交方式設置為自動,它可以進行數據操作,但是這樣并不滿足我們實際的業務需求,因為有時候在我保存一個數據之后,我希望他能繼續保存另一條數據,我希望在保存完兩條或者多條之后一起進行事務提交,這樣即使出錯,我們可以回滾,取保數據的一致性,要么都成功要么都失敗,這時候我們就不能每保存完一條數據之后事務就自動提交,因為這樣它們不在同一個事務當中,我們不能保證數據的一致行。所以這時候我們就需要手動的來配置我們的事務,這就需要用到Spring為Hibernate提供的事務管理機制,Spring提供的事務管理可以分為兩類:編程式的和聲明式的,編程式,其實就是在代碼里面來控制,像Hibernate操作數據一樣,開啟事務,提交事務,這種方式有一定的局限性,所以我們一般是用聲明式來配置我們的事務。

聲明式事務配置主要分以下幾步:

1、聲明式事務配置

  (1) 配置事務管理器;

  (2)事務的傳播特性;

  (3)那些類那些方法使用事務。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!-- 配置事務管理器 指定其作用的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 的整合事務管理的理解,謝謝大家對本站的支持!

原文鏈接:http://www.cnblogs.com/guiqiu-Li/p/5895069.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 午夜久久影院 | 国色天香社区在线视频免费观看 | 美女扒开胸罩露出奶了无遮挡免费 | 亚洲视频在线免费看 | 日韩一区二区三区四区五区 | 美女扒开胸罩露出奶了无遮挡免费 | 91青青视频 | 亚洲精品一区二区三区在线播放 | 荡女人人爱全文免费阅读 | 欧美视频一区二区三区四区 | 精品在线免费播放 | 日本不卡一区二区三区在线观看 | 美女被狂揉下部羞羞动漫 | 无码中文字幕热热久久 | 韩国三级视频网站 | 日本无卡视频 | 91精品啪在线观看国产日本 | 国产成人99久久亚洲综合精品 | 精品一区二区三区色花堂 | 国内自拍2020 | 合欢视频免费 | 亚洲AV无码A片在线观看蜜桃 | 好奇害死猫在线观看 | 国产大乳美女挤奶视频 | 日韩精品首页 | 青青草99热久久 | 亚洲天堂导航 | 日本在线不卡免 | 成年人免费在线看的惊悚动作片 | 天天做天天爱天天综合网 | 国产麻豆流白浆在线观看 | 亚洲视频第一页 | 欧美特黄三级在线观看 | 门房秦大爷最新章节阅读 | 亚洲免费在线观看视频 | 国产福利资源网在线观看 | 亚洲高清在线精品一区 | 被黑人同学彻底征服全文小说阅读 | oneday高清在线观看 | 欧美一级专区免费大片俄罗斯 | 黑白配高清hd在线视频 |