在數據庫應用程序中最基本的操作是CRUD(創建/讀取/更新/刪除)這個操作構成了數據庫應用程序的基石在單機時代一個數據庫只由一個應用程序使用這樣CRUD操作並不會帶來什麼負面影響但當進入網絡時代後這一切都發生了改變由於網絡數據庫程序一般是由多個客戶端同時操作一個數據庫因此傳統的CRUD操作將變得不再安全因此這個問題將引出本文的中心內容事務通過事務可以使傳統的CRUD操作適應網絡數據庫應用
本文分為三個部分第一部分討論了Hibernate如何管理事務和會話第二部分描述了Hibernate用於管理事務和會話的核心API在第三部分將舉一個如何應用會話和事務的例子並討論了ThreadLocal變量
Hibernate中的會話和事務
所謂會話就是一個客戶端從登錄服務器開始到登出服務器為止在這期間關於客戶端和服務器之間的所有活動一個會話中可包含一個或多個事務每一個事務是一原子操作這個原子操作中可以包含多個操作但這些操作是一個整體要麼都成功要麼都失敗在討論Hibernate的會話和事務之前讓我們先來了解一下事務在底層是如何工作的在Java中的操作數據庫一般是和JDBC直接打交道而JDBC則是直接通過Socket和數據庫打交道我們所說的底層實際上就是指JDBC和數據庫層
首先讓我們來看看數據庫事務數據庫的操作由很多CRUD操作集合組成而每一個集合就是數據庫的一個事務一個事務由begin transaction開始最後以commit或rollback結束這兩個事務結束語保證了這一組CRUD操作要麼都成功執行要麼回到執行前的狀態換句話說這一組CRUD操作只要有一條語句執行失敗整個組都將回滾這麼做是為了保證數據的完整性
如果事務中只有一個操作那麼事務是否提交只依賴於這個操作的成功或失敗如一條INSERT語句只有在這條語句成功執行後數據才被真正寫到數據庫中
現在讓我們來看看事務中包含多條CRUD語句的情況如包含一條UPDATE語句和二條DELETE語句在這種情況下不管這三條語句哪一條執行失敗整個事務都將回滾
在使用事務時為了不產生負面影響常常要對事務進行劃分即將一個大的事務合理劃分成一些小的事務這樣如果某一個事務回滾的話就不用回滾所有操作了至於將大事務劃分成多少個小的事務這就要根據具體的情況而定
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28145.html