Hibernate session的緩衝

來源:互聯網
上載者:User

                Hibernate的SessionFactory是安全執行緒的,這個SessionFactory負責建立Session執行個體,這個Session執行個體卻是非安全執行緒的。一個資料來源對應一個SessionFactory,而一個SessionFactory能產生多個Sessioni執行個體。至於為什麼,本人還沒有研究那麼深,在這裡不做任何解釋。使用Hibernate時對象的生命週期、事務的管理、資料庫的存取都與Session相關,所以這裡重點說一下這個Session。

                如果希望一個對象一直處於生命週期中,就必須保證至少一個變數應用它,如所示:

表示對象的記憶體配置以及對象關係。c一直引用Customer對象,Customer對象的生命週期就不會結束,當c不在引用Customer對象時,垃圾收集器就會在某個時間點將該對象清理掉,該對象生命週期結束。關於記憶體配置和垃圾收集的資訊可以參考《深入理解Java虛擬機器:JVM進階特性與最佳實務》。

               SessionFactory是一級緩衝,Session是二級緩衝,通常我們使用的j對象都是放在這個Session緩衝中的,只要Session執行個體沒有結束生命週期,那麼存放在它緩衝中的對象也不會結束生命週期。如所示,當調用Session的save方法持久化Customer對象時,Customer對象會被加入到Session緩衝中,只要Session緩衝沒有被清空,那麼Customer對象就仍處於生命週期中,那麼其他與之關聯的對象就可以調用該對象。

             Session緩衝的作用:

1:減少訪問資料庫的頻率。對象放在緩衝中,從緩衝中讀取資料要比從資料庫中讀取資料更快。圖1為session中get方法的查詢時序圖

 

2:當緩衝中的持久化對象之間存在迴圈關聯關係時,Session會保證不出現訪問對象圖的死迴圈,以及由死迴圈引起的JVM堆疊溢位異常。

3:保證資料庫中的記錄與緩衝中相應對象保持同步。這裡涉及髒檢查及清理緩衝的機制,在此不做過多解釋。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.