在實際專案應用中,很多業務處理都需要一系列完整的與使用者之間的互動,而這些使用者是指對資料庫有交叉訪問的使用者。在基於web
的應用和企業應用中,跨使用者互動的資料庫事務是無法接受的。例如在介面的第一頁面,開啟對話方塊,使用者所看到的資料是被乙個特定的session
和資料庫事務載入的。使用者可以隨意修改對話方塊中的資料物件。過一段時間後,使用者單擊「儲存」按鈕儲存修改的持久化實體,同時也期望自己是唯一修改這個資訊的人,不會出現修改衝突。
從使用者的角度來看,可以把這個操作單元稱為長時間執行的對話(conversation
),或者應用事務。在的應用程式中,可以有很多種處理方法來實現它。
第一種處理方法是在使用者思考的過程中,保持session
和資料庫事務是開啟的,保持資料庫鎖定,以阻止併發修改,從而保證資料庫事務隔離級別和原子操作。這種方式當然是乙個反模式,因為鎖爭用會導致應用程式無法擴充套件併發使用者的數目。
很明顯,在程式中必須使用多個資料庫事務來實現這個對話。在這個例子中,維護業務處理的事務隔離變成了應用程式層的部分責任。乙個對話通常跨越多個資料庫事務。如果僅僅只有乙個資料庫事務(最後的那個事務)儲存更新過的資料,而所有其他事務只是單純的讀取資料,那麼應用程式事務將保證其原子性。在hibernate
中實現這種方式主要方法有: u
自動版本化:hibernate
能夠自動進行樂觀併發控制,如果在使用者思考過程中發生併發修改,hibernate
能夠自動檢測到。一般只在對話結束時才檢查。 u
脫管物件:如果採用短對話模式,所有載入的例項在使用者思考的過程中都處於與session
脫離的狀態。hibernate
允許把與session
脫離的物件重新關聯到session
中,並且對修改進行持久化。自動版本化被用來隔離併發修改。 u
長會話:hibernate
的session
可以在資料庫事務提交之後和底層的jdbc
連線斷開,當乙個新的客戶端請求到來的時候,它又重新連線上底層的jdbc
連線。但這種情況可能會造成不必要的session
和jdbc
連線的重新關聯。自動版本化被用來隔離併發修改,session
通常不允許自動flush
,而是在程式中明確呼叫flush
方法。
長難句分析05
much of the language used to describe monetary police,such as steering the economy to a soft landing or a touch on the brakes makes it sound like a pr...
《管理長歌行》 青蛙與蜘蛛的對話
水田裡有乙隻老青蛙,每天蹦蹦跳跳地在尋找飛蟲。水田旁的樹上有乙個蜘蛛掛在網 網製得精巧而規矩,八卦形地張開。一天,青蛙對樹上的蜘蛛說 蜘蛛老弟啊,為了生活,我每天都在辛苦地工作,蹦來跳去,到處找飛蟲,即使在夜裡也不敢休息,儘管這樣,我也只能勉強餬口啊。你可好,整天掛在樹上,動都很少動,每日三餐都能得...
hibernate 原始碼分析
settingfactory類 設定屬性類。其中有buildsettings properties properties 方法,設定自定義屬性。設定類和表之間的對映。class 進去,table出來。了解不清晰。binding類 po和資料庫中表及其之間的對映的繫結。configuration類,配...