日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 高级编程进阶_JAVA高级编程之hibernate进阶学习

發布時間:2025/3/11 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 高级编程进阶_JAVA高级编程之hibernate进阶学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

二級緩存

hibernate的session緩存

在事務級別進行持久化數據的緩存操作。 當然,也有可能分別為每個類(或集合),配置集群、或 JVM 級別(SessionFactory 級別)的緩存。你甚至可以為之插入一個集群的緩存。注意,緩存永遠不知道其他應用程序對持久化倉庫(數據庫)可能進行的修改 (即使可以將緩存數據設定為定期失效)。

session緩存 :

session緩存是由一系列的Java集合構成的。當一個對象被加入到Session緩存中,這個對象的引用就加入到了java的集合中,以后即使應用程序中的引用變量不再引用該對象,只要Session緩存不被清空,這個對象一直處于生命周期中。

session作用:

1)減少訪問數據庫的頻率。

2)保證緩存中的對象與數據庫中的相關記錄保持同步。

Session清理緩存的時機:

1)當調用Transaction的commit()方法時,commit()方法先清理緩存(前提是FlushMode.COMMIT/AUTO),然后再向數據庫提交事務。

2)當應用程序調用Session的find()或者iterate()時,如果緩存中的持久化對象

的屬性發生了變化,就會先清理緩存,以保證查詢結果能反映持久化對象的最新

狀態。

3)當應用程序顯示調用Session的flush()方法的時候。

Hibernate對象的狀態

1)瞬時態Transient:

含義:由new操作符創建,且尚未與Hibernate Session關聯的對象。處于瞬時態的java對象成為臨時對象。

特點:不處于Session的緩存中,即不被任何一個Session實例關聯。

在數據庫中沒有對應的記錄。

2)持久態Persistent

含義:已經被持久化,加入到Session的緩存中,處于持久化狀態的java對象被稱為持久化對象。

特點:位于一個Session實例的緩存中。

持久化對象在數據庫中有相應的記錄,Session在清理緩存時,會根據持久化對象的屬性變化來同步更新數據庫。

當一個持久化對象關聯一個臨時對象,在允許級聯保存的情況下,Session在清理緩存的時候會把這個臨時對象也轉變為持久化對象。

3)脫管態Detached

含義:已經被持久化,但不再處于Session的緩存中,處于脫管狀態的java對象稱為游離對象。

特點:不再位于Session的緩存中,即不被Session關聯。

游離對象是由持久化對象轉變過來的,因此在數據庫存在與之對應的記錄(前提是沒有其他程序刪除了這條記錄)。

hibernate對象狀態裝換圖如下圖所示:

Session API :

Session接口是Hibernate向應用程序提供的操縱數據庫的最主要的接口,它提供了基本的保存,更新,刪除和查詢的方法。

save():把一個臨時對象加入到緩存中,使它變成持久化對象

如果在save()方法之后,又修改了持久化對象的屬性,會使得Session在清理緩存的時候額外執行SQL update語句。

注意:save()方法是用來持久化一個臨時對象的!

update():把Object對象重新加入到Session緩存中,使之變為持久化對象。

計劃一條update語句,只有在清理緩存的時候才會執行,并且在執行的時候才會把參數對象中的屬性值組裝到update語句中。

注意:update()是將一個游離對象轉變為持久化對象的。

saveOrUpdate():同時包含了save()與update()方法的功能,如果傳入的參數是臨時對象,調用save方法,如果參入參數是游離對象,調用update()方法,如果傳入的是持久化對象,直接返回。

load()/get():都會根據給定的OID從數據庫中加載一個持久化對象,區別在于,當數據庫中不存在與OID對應的記錄時,load()方法會拋出ObjectNotFoundException異常,而get()方法返回null。

delete():于從數據庫中刪除與參數對象對應的記錄,如果傳入的參數是持久化對象,Session就計劃執行一個delete語句,如果傳入的參數是游離對象,先使游離對象被Session關聯,使它變為持久化對象,然后計劃一個delete語句,在清理緩存的時候執行。

evict():從緩存中清除參數指定的持久化對象。

clear():清空緩存中所有持久化對象。

總結

以上是生活随笔為你收集整理的java 高级编程进阶_JAVA高级编程之hibernate进阶学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。