1)SessionFactory數據庫
這是Hibernate的關鍵對象,它是單個數據庫映射關係通過編譯後的內存鏡像,它也是線程安全的。它是生成Session的工廠,自己須要依賴於ConnectionProvider,該對象能夠在進程或集羣的級別上,爲那些事務之間能夠重用的數據提供可選的二級緩存。緩存
2)Session安全
它是應用程序和持久層之間交互操做的一個單線程對象。它也是Hibernate持久化操做的關鍵對象,全部的持久化對象必須在Session的管理下才能夠進行持久化操做,該對象生存週期很短。它底層封裝了JDBC連接,它也是Transaction的工廠。Session對象持有一個必選的一級緩存,顯式執行flush以前,全部持久化操做的數據都在緩存中Session對象處。ide
3)持久化對象線程
也就是咱們常說的POJO,一旦與特定的Session關聯,並對應數據表的指定記錄,該對象就處於持久化狀態,這一系列對象都被稱爲持久化對象。在程序中對持久化對象執行的修改,都將自動被轉換爲持久層的修改。持久化對象徹底能夠是普通的JavaBean/POJO,惟一特殊的是它們正與一個Session關聯。對象
4)瞬態對象和脫管對象進程
系統經過new關鍵字建立的JAVA實列,沒有與Session關聯,此時處於瞬態。便是被應用程序實列化後,還沒有進行持久化的對象。通過實列化後的實列,由於Session的關閉而轉換爲脫管狀態。事務
將瞬態對象轉換爲持久化對象,Hibernate Session提供瞭如下幾個方法:內存
Serializable save(Object obj);將obj進行持久化,該對象的屬性將保存至數據庫;get
void persist(Object obj);將obj進行持久化,該對象的屬性將保存至數據庫;
Serializable save(Object obj, Object pk);將obj對象保存至數據庫,而且指定主鍵;
void persist(Object obj, Object pk);將obj對象保存至數據庫,而且指定主鍵;
其中save()和persist()方法區別是,save()返回該持久化對象的標識屬性值(主鍵值),persist()無返回值;
也能夠經過load(Test.class, Object pk)來加載一個持久化實列,get()方法也相似;get()方法沒有延時加載,會當即訪問數據庫,load()不會當即訪問數據庫
5)事務(Transaction)
表明一次原子操做,它具備數據庫事務的概念。Hibernate事務是對底層具體的JDBC、JTA以及CORBA事務的抽象。在某些狀況下,一個Session以內可能包含多個Transaction對象,雖然事務操做是可選的,但全部持久化操做都應該在事務管理下進行,即便是隻讀操做。
6)連接提供者(ConnectionProvider)
它是生成JDBC鏈接的工廠,它經過抽象將應用程序與底層的DataSource或DriverManager隔離開。這個對象無須應用程序直接訪問,僅在應用程序須要擴展時使用。
7)事務工廠(TransactionFactory)
它是生成Transaction對象實列的工廠。該對象也無須應用程序直接訪問。它負責對底層具體事務實現進行封裝、將底層具體的事務抽象成Hibernate事務。
自李剛《經典Java EE企業應用實戰》