spring hibernate事務的配置

2021-08-29 12:43:59 字數 1453 閱讀 3089

最近要用到spring+hibernate來開發。下面來說一下這兩都組合後的事務管理問題。

首先我們來明白什麼是事務,簡單的說就是一次對資料庫的操作。事務它有四個特性:原子性,永續性,隔離性和一致性。

原子性是指:對資料庫的一次原子操作,要麼從裡寫資料,要麼刪除資料。

隔離性是指:由併發事務所作的修改必須與任何其他併發事務所作的修改隔離。事務識別資料時資料所處的狀態,要麼是另一併發事務修改它之前的狀態,要麼是第二個事務修改它之後的狀態,事務不會識別中間狀態的資料。這稱為可序列性,因為它能夠重新裝載起始資料,並且重播一系列事務,以使資料結束時的狀態與原始事務執行的狀態相同。

一致性是指:事務在完成時,必須使所有的資料都保持一致狀態。在相關資料庫中,所有規則都必須應用於事務的修改,以保持所有資料的完整性。事務結束時,所有的內部資料結構(如 b 樹索引或雙向鍊錶)都必須是正確的。

我們在專案開發時也一定是能用到事務的。下面我們就來說一下在spring+hibernate的環境下怎麼來配置事務。首先要明白的是在這裡我們要用spring來管理事務。

在spring中事務管理有二種方法:宣告式事務管理和程式設計式事務管理。我們最常用的是宣告式事務管理。在spring中宣告式的事務管理是用spring的aop來實現的。了解了這些後我們要考慮的是我們的事務到底要加在那一層,在我們的專案中往往將事務加到serivce層,這樣做的好是:比如在dao層我有三個方法來對資料進行操作,而我們的一次業務邏輯,需要我們要呼叫這三個方法才能完成這個一業務而這三方法還要放到乙個事務中去,我們要是將事務配在dao層我們做法只有將這三個方法分別加上乙個事務,這顯然違背了我們的業務需求。而在我們的service層中可以用乙個方法來呼叫dao層中的這三個方法,這樣我們只要將serive層中的這個方法加上乙個事務控制,我們業務需求就很容易的解決了。所以我們將事務大多數的要加在service層上。

在spring的配置檔案中加入這些是非常容易的。我們來看一下:

是不是很簡單呀,我們來說一下,這裡到底是什麼意思:

首先我要配置好我們的事務管理器,在這裡我們使用是spring提供的乙個hibernate的事務管理器(位於org.springframework.orm.hibernate3包中的hibernatetransactionmanager類),再就是我們要向這個類中注入乙個session;它的配置和在spring中配置基本的bean一樣簡單。

第二步就是我們要給那個哪些業務方法加上事務了,也就是事物特徵的配置:在這裡我們就要用aop了不過也是非常簡單的。我們要用乙個事務通知來指向我們用的是哪乙個事務管理器。然後用乙個下的來指定我們要為哪些方法加上事務操作。例:意思是說我們要將所有以del打頭的方法加上事務,事務的級別為required級別。基中是說其它的方法我全部唯讀事務。

最後我們要完成的工作是:要確保我們在上面定義的事務在合適的時候被執行。在這裡我定義乙個切面,再定義乙個切入點用來說明我們要作用在哪個類或介面中的的方法上。在這裡最好是作用在介面上。最後我們再定義乙個通知器來和我們的事務特徵繫結在一起。並將切入放在我們的乙個介面上。

spring hibernate引起的延遲載入

在hibernate中,延遲載入是1個非常大的優點,但有時候卻給我們帶來一些小麻煩,在後台查詢結束 後,session已經關閉,但在前台顯示的時候,如果存在關聯關係就會產生延遲載入異常。解決辦法是客戶端每次請求就分配1個session,將請求結果返回給客戶端,並完成展現後關閉session 實現這個...

Spring Hibernate整合注意事項

1 spring jar包 需要額外加入 commons pool 和commons dbcp 若包含 spring 自帶的測試,還需要引入 spring test 2 spring beans.xml 如果使用了 spring annotation 則需要加入以下兩項配置 前提是已經匯入了bean...

spring hibernate 宣告式事務管理

之前在使用 spring hibernate 宣告式事務管理時,總是出錯,無法進行事務管理,摸索了很久,終於明白。既然使用 srping管理事務,那麼所有的 bean都要在 springioc中進行管理,否則何談 spring宣告式事務,包括 dao層,service層和 controller層 在...