Hibernate文檔筆記共分為三個部分,此處是第一部分,講述了對象定義、實例狀態、JMX集成和JCA 支持四個部分的內容。
一、對象定義
1.org.hibernate.SessionFactory
對於單個數據庫,被編譯的映射,是一個線程安全的緩沖區。是一個Session和ConnectionProvider客戶端的工廠。擁有可選的對過程級和集群級重復利用的數據的緩存(二級緩存)。
2.org.hibernate.Session
單線程、短生命周期的在應用程序和持久化存儲系統之間的一個會話對象。封裝了一個JDBC連接。是一個事務的工廠。擁有強制的對持久化對象的緩存(一級緩存),當通過標識浏覽對象之間關系和查找對象時使用。
3.Persistent objects and collections
包含執久化狀態和業務功能的短生命周期的、單線程對象。可以是POJOs,通常是和Session(嚴格說,是單個Session)相關聯的對象。Session一關閉,他們將和Session分離,可以自由的使用在應用層的任何地方。(也就是說,作為傳輸對象使用(Transfer Object)。)
4.TransIEnt and detached objects and collections
不和當前Session關聯的持久化類的實例。他們可以被應用程序在不持久化時實例化,也可以被關閉的Session實例化。
5.org.hibernate.Transaction (可選)
應用程序用來指定一個原子操作的單線程、短生命周期的對象。低層JDBC、JTA、CORBA事務的抽象程序。在相似的情況下,一個Session可以同時橫跨多個事務。事務劃分,既可以使用低層的APIs,也可以使用Transaction。
6.org.hibernate.connection.ConnectionProvider (可選)
JDBC連接或JDBC連接池的工廠。低層DataSource和DriverManager的抽象程序。
這個對象不暴露給應用程序,但是應用程序可以被開發者繼承和實現。
7.org.hibernate.TransactionFactory (可選)
Transaction實例的工廠。這個對象不暴露給應用程序,但是應用程序可以被開發者繼承和實現。
二、實例狀態
持久化對象根據持久化上下文的定義,可以有三種不同的狀態。Hibernate Session對象是一個持久化上下文。
1.transIEnt
不關聯任何的持久化上下文。沒有持久化的標識(指主鍵值Primary key value)。
2.persistent
和當前持久化上下文關聯。他有一個持久化標識,多數情況,在數據庫中有對應的行。對於特定的持久化上下文,Hibernate保證持久化標識和Java標識(內存中對象的位置)相同。
3.detached
曾經和一個持久化上下文關聯,持久化上下文關閉;或者對象在另一個進程中被序列化。他擁有持久化標識,多數情況,在數據庫中有對應的行。對於分離對象Hibernate不保證持久化標識和Java標識的對應關系。
三、JMX集成
JMX是Java組件管理的JEE標准。Hibernate可以被JMX服務管理。在發行版本中,Hibernate提供了一個MBean的實現,org.hibernate.jmx.HibernateService。
在JBoss上,你使用JMX可以得到的好處:
1.Session Management
Hibernate Session的生命周期可以自動的綁定到JTA事務范圍。這意味著,你不需要手動的打開關閉Session,這成為JBoss EJB攔截器的要完成的工作。在你的代碼中,也不用擔心事務的劃分,當然除非你想要寫一個輕便的持久化層,通過使用Hibernate Transaction APIs。你可以調用HibernateContext來訪問Session。
2.HAR deployment
通常使用JBoss Service Deployment Descriptor(在EAR或SAR文件中)發布Hibernate JMX Service,它支持Hibernate SessionFactory所有的常用配置選項。無論如何,你還需要在deployment descriptor中描述所有的映射文件。如果你使用可選的HAR Deployment,JBoss將自動檢測所有的映射文件在HAR文件中。
四、JCA 支持
Hibernate也可以配置作為一個連接器。該功能是實踐型功能。
以上四個方面的內容組是我的Hibernate文檔筆記的第一部分,想更多的了解,請關注其他兩個部分。