Hibernate長對話分析

2021-08-29 21:22:24 字數 1133 閱讀 6386

在實際專案應用中,很多業務處理都需要一系列完整的與使用者之間的互動,而這些使用者是指對資料庫有交叉訪問的使用者。在基於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類,配...