Spring對Hibernate事務管理

2021-07-13 12:03:41 字數 1716 閱讀 2297

每次帶班,講到spring事務這一塊的時候,大家總是有很多的疑問,其實spring事務並不難,可能初次接觸的時候有的不好理解,今天我們就詳細來談一下spring的事務管理機制,主要是對hibernate進行的事務管理。

在談spring事務管理之前我們想一下在我們不用spring的時候,在hibernate中我們是怎麼進行資料操作的。在hibernate中 我們每次進行乙個操作的的時候我們都是要先開啟事務,然後進行資料操作,然後提交事務,關閉事務,我們這樣做的原因是因為hibernate預設的事務自 動提交是false,他是需要我們人為的手動提交事務,假如你不想每次都手動提交事務的話,你可以在hibernate.cfg.xml我檔案中把它設定 為事務自動提交:

<

property

name

="hibernate.connection.autocommit"

>true

property

>

當我們spring對我們的hibernate進行整合之後,我們的**又出現了什麼變化呢?整合,之後,我們不再是每次都去拿 session進行資料操作了,也不需要每次都開啟事務,提交事務了,我們只需要spring給我們提供的乙個hibernatetemplate,我們 直接用這個類裡面給我們提供的資料操作方法就可以運算元據了。我們在也看不到關於事務的**了,那spring究竟有沒有在他的操作方法裡面封裝事務處理 呢?有的人直接hibernatetemplate裡面提供的方法運算元據,成功了,有的人卻又失敗了,這到底是怎麼回事呢?其實這裡要看我們是怎樣整合 我們的hibernate和spring,如果在整合的過程中,我們拋棄了hibernate.cfg.xml檔案,直接在spring的的配置檔案中進 行配置資料來源的話,那你直接用hibernatetemplate裡面提供的方法是可以成功運算元據的,如果你還是用hibernate.cfg.xml 來配置資料來源,在spring的配置檔案中引用hibernate.cfg.xml檔案,那麼你不能成功,這其中的原因就是因為如果你用 hibernate.cfg.xml檔案配置資料來源,就像我們前面說的,hibernate預設是手動提交事務,而hibernatetemplatel 提供的方法裡面並沒有提供事務提交,而如果你用spring的配置檔案來配置資料來源,sping預設是自動提交的,所以就會成功,如果你想把spring 設定為手動提交你可以在起配置檔案中進行配置:

<

property

name

="defaultautocommit"

>

<

value

>false

value

>

property

>

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

宣告式事務配置主要分以下幾步:

1、宣告式事務配置

Spring對JDBC及hibernate的支援

spring對jdbc及hibernate的支援 木馬網咖 一 作用 1.定義 spring的dao不是新發明一種技術,而是對原來技術的一種封裝,定義了一套 簡單實用的api 2.使用dao的好處 降低了業務邏輯層和具體的持久層技術 3.spring對dao的支援,定義了一套完善的異常類 1 執行時...

Spring 學習筆記整合 Hibernate

spring和hibernate處於不同的層次,spring關心的是業務邏輯之間的組合關係,spring提供了對他們的強大的管理能力,而hibernate完成了or的對映,使開發人員不用再去關心sql語句,直接與物件打交道。spring提供了對hibernate的sessionfactory的整合功...

Hibernate框架1 Hibernate入門

hibernate是目前最流行的orm框架。當我們採用orm框架之後,應用程式不再直接訪問底層資料庫,而是以物件導向的方式來操作持久化物件 例如建立 刪除等 而orm框架則將這些物件導向的操作轉化成底層的sql操作。orm用最直白的話來說就是 一大堆的類庫,我們用物件導向的方式來呼叫,它幫我們翻譯為...