Hibernate緩存和CRUD操作

1.文章轉載於:http://www.techrss.cn/html/2008/04-08/79497.htm

 

 

 

2.1 Hibernate實體對象的三種狀態

     (1)Transient:所謂Transient就是說實體對象在內存中存在,與數據庫的記錄無關。

     (2)Persient:Persient對象對應數據庫中的一條記錄,也可以這樣子理解,如果一個實體對象與某個session發生關聯,並處於對應session的有效期內,那麼它就處於Persient狀態。

     (3)Detached:所謂Detached就是處於Persient狀態對應的session關閉之後的狀態。

 

      我們平時所說的PO(持久化對象)指的是位於Persient狀態的對象,而VO(值對象)就是指Transient和Detached狀態的對象。

 

 

2.2CRUD

     (1)save()方法,調用save方法時,首先會在session緩存中查找保存對象,如果實體對象已經處於Persient狀態,則直接返回,否則執行SQL操作,將保存的實體對象加入session緩存中(save方法不會把實體加入到二級緩存的),最後對存在的級聯關係進行遞歸處理。

     (2)saveOrUpdate()方法:和save一樣首先在session緩存中查找,判斷對象是否爲保存狀態,如果對象處於Persient,不執行操作,處於Transient執行save操作,處於Detached調用save將對象與session重新關聯。

 

      這裏要注意的是在批量操作時要適時地對session進行flush操作,避免出現OutOfMemoryError。(開發中設置一個計數器,到達某個臨界值的時候就清空一次就可以啦)

 

2.3 查詢

      查詢是受緩存影響最大的。

      (1)session的load()和get():這兩者的區別主要是load會在二級緩存中查找,而get在內容緩存中查找不到的話將跳過二級緩存直接進行SQL操作。

      (2)Query的list()和iterate()方法:list實際上無法使用緩存,它對緩存只寫不讀,而iterate則是首先查找所有符合條件的id(首先在本地緩存中查找)在執行相應的select獲得對應記錄,iterate方法的使用是查找的實體對象在緩存中已經存在了,否則查詢性能很低,容易產生N+1現象

 

 

發佈了38 篇原創文章 · 獲贊 0 · 訪問量 1751
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章