hibernate初步3

来源:http://www.cnblogs.com/understander/archive/2016/09/02/5833468.html
-Advertisement-
Play Games

事務和併發 1.事務概念 一組不可分割的操作,事務有如下屬性(ACID 屬性:Atomic Consistent Isolated Durable)(1)原子性 Atomic 事務的原子性指的是,事務中包含的程式作為資料庫的邏輯工作單位,它所做的對數據修改操作要麼全部執行,要麼完全不執行。 (2)一 ...


事務和併發


1.事務概念
一組不可分割的操作,事務有如下屬性(ACID 屬性:Atomic Consistent Isolated Durable)
(1)原子性---Atomic
 事務的原子性指的是,事務中包含的程式作為資料庫的邏輯工作單位,它所做的對數據修改操作要麼全部執行,要麼完全不執行。
(2)一致性---Consistent  
事務的一致性指的是在一個事務執行之前和執行之後事務操作的對象總狀態不變
(3)分離性---Isolated  
分離性指併發的事務是相互隔離的。即一個事務內部的操作及正在操作的數據必須封鎖起來,不被其它企圖進行修改的事務看到。
(4)持久性---Durable
持久性意味著當系統或介質發生故障時,確保已提交事務的更新不能丟失。即一旦一個事務提交,DBMS保證它對資料庫中數據的改變應該是永久性的


2.事務併發問題
對於同時運行的多個事務, 當這些事務訪問資料庫中相同的數據時, 如果沒有採取必要的隔離機制, 就會導致各種併發問題:
(1)臟讀:

對於兩個事務 T1, T2, T1 讀取了已經被 T2 更新但還沒有被提交的欄位。 之後, 若 T2 回滾, T1讀取的內容就是臨時且無效的.


(2)不可重覆讀:

對於兩個事物 T1, T2, T1 讀取了一個欄位, 然後 T2 更新了該欄位. 之後, T1再次讀取同一個欄位, 值就不同了.


(3)幻讀:

對於兩個事物 T1, T2, T1 按照某個查詢條件從一個表中讀取記錄, 然後 T2 在該表中插入了一些新的行或者刪除某些行. 之後, T1 再次按相同查詢條件讀取同一個表, 讀到的記錄數不同



3.事務隔離級別
解決事務併發問題可以使用設置事務隔離級別,資料庫和應用程式都可以設置隔離級別
(1)資料庫的隔離級別
資料庫事務的隔離性: 資料庫系統必須具有隔離併發運行各個事務的能力, 使它們不會相互影響, 避免各種併發問題。
一個事務與其他事務隔離的程度稱為隔離級別. 資料庫規定了多種事務隔離級別, 不同隔離級別對應不同的干擾程度, 隔離級別越高, 數據一致性就越好,

但併發性越弱。
SQL ANSI SQL 標准定義了 4 種事務隔離級別,級別越高,成本越高:

4種隔離級別圖片


註:
Oracle 只支持 2 種事務隔離級別:READ COMMITED, SERIALIZABLE. Oracle 預設的事務隔離級別為: READ COMMITED
Mysql 支持4中事務隔離級別。Mysql 預設的事務隔離級別為: REPEATABLE READ

(2)在 MySql 中設置隔離級別
(1)每啟動一個 mysql 程式, 就會獲得一個單獨的資料庫連接. 每個資料庫連接都有一個全局變數 @@tx_isolation, 表示當前的事務隔離級別. MySQL 預設的隔離級別為 Repeatable Read
(2)mysql設置手動提交/自動提交事務:set autocommit=0(手動提交)/1(自動提交)  
(3)查看當前的隔離級別:  
1)當前連接:SELECT @@tx_isolation;
2)全局:SELECT @@global.tx_isolation;
(4)設置當前 mySQL 連接的隔離級別:   
1)set transaction isolation level read committed;
2)set session transaction isolation level read uncommitted;
(5)設置資料庫系統的全局的隔離級別:
set global transaction isolation level read committed;

(3)在 Hibernate 中設置隔離級別
JDBC 資料庫連接使用資料庫系統預設的隔離級別. 在 Hibernate 的配置文件中可以顯式的設置隔離級別. 每一個隔離級別都對應一個整數:
隔離級別            對應的整數表示
READ UNCOMMITED        1
READ COMMITED          2
REPEATABLE READ        4
SERIALIZEABLE          8
Hibernate 通過為 Hibernate 映射文件指定 hibernate.connection.isolation 屬性來設置事務的隔離級別。例:hibernate.connection.isolation = 4
註意:
Hibernate不可能改變在受管環境下由應用伺服器提供的資料庫連接的隔離級別,只能通過改變應用伺服器配置的方式來改變.
設置隔離級別是全局選項,會影響所有的連接和事務







您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一.為什麼要進行數據校驗 對於一個web應用而言,所有的應用數據都是通過瀏覽器收集的,用戶的輸入信息是非常複雜的,對於一些用戶操作不熟練,輸入出錯,等網路傳輸不穩定,這些都有可能導致異常輸入。 異常的輸入,輕則導致系統非正常中斷,重則導致系統崩潰,應用程式必須能正常處理表現層接收的異常數據,通常的做 ...
  • 一.與Servlet API解耦的訪問方式 1.為了避免與Servlet API耦合在一起,方便Action類做單元測試, Struts2對HttpServletRequest、HttpSession和ServletContext進行了封裝, 構造了三個Map對象來替代這三種對象,在Action中, ...
  • 由於在數據表之間可以通過外鍵進行關聯,在使用Hibernate操作映射到存在關聯關係的數據表的對象時,需要將對象的關聯關係與數據表的外鍵關聯進行映射。 1.前言 這篇文章標題為單向多對一,其實是為以後的種種映射和HQL操作作一個鋪墊,實現單向多對一或者一對多再或者雙向多對一都很簡單,畢竟現在的工具實 ...
  • openopen(url)- 在瀏覽器中打開URL,可以接受相對和絕對路徑兩種形式type type(inputLocator, value)- 模擬人手的輸入過程,往指定的input中輸入值- 也適合給覆選和單選框賦值 clickclick(elementLocator)- 點擊連接,按鈕,覆選和 ...
  • 一、作為值的函數 結果: 二、匿名函數 三、帶函數參數的函數 結果: 四、參數(類型)推斷 匿名函數簡寫: 五、一些有用的高階函數 map這個方法將一個函數應用到某個集合的所有元素並返回結果 foreach將函數應用到每個元素,並不返回結果 結果: filter輸出所有匹配某個特定條件的元素 結果: ...
  • $pip install mysqlclient 運行結果如下: 可能是由於不相容導致的(中間試過各種方法,比如本地安裝mysql等等),最後找來mysqlclient-1.3.7-cp35-cp35m-win_amd64.whl資源,安裝成功! $pip install mysqlclient-1 ...
  • JPA 1.JPA概述 JPA(Java Persistence API)是Sun官方提出的Java持久化規範。它為Java開發人員提供了一種對象/關係映射工具來管理Java應用中的關係數據。,而Hibernate是它的一種實現。除了Hibernate,還有EclipseLink(曾經的toplin ...
  • Java5 在 java.util.concurrent 包中已經包含了讀寫鎖。儘管如此,我們還是應該瞭解其實現背後的原理。 讀/寫鎖的 Java 實現 先讓我們對讀寫訪問資源的條件做個概述: 讀取 沒有線程正在做寫操作,且沒有線程在請求寫操作。 寫入 沒有線程正在做讀寫操作。 如果某個線程想要讀取 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...