天天看點

hibernate架構的核心對象和相關知識點

Hibernate架構

下圖提供了hibernate體系的高層視圖:

hibernate架構的核心對象和相關知識點

Hibernate全面解決方案:

hibernate架構的核心對象和相關知識點

Hibernate核心API

Configuration

負責管理資料庫的配置資訊。資料庫的配置資訊包含了Hibernate連接配接資料庫的一些基本資訊(hibernate.cfg.xml),Configuration對象可以通過加載配置檔案擷取并管理這些資訊.

Configuration config = new Configuration().configure();

或者:

File file = new File(“C:\\myhibernate.xml”);

Configuration config = new Configuration().configure(file);

SessionFactory (org.hibernate.SessionFactory)

針對單個資料庫映射關系經過編譯後的記憶體鏡像,是線程安全的(不可變)。  作為  Session

的工廠和 ConnectionProvider 的客戶。SessionFactory 可以在程序或叢集的級别上,為那些事務之間可以重用的資料提供可選的二級緩存。

SessionFactory使用要點如下:

1.    負責建立Session對象,可以通過Configuration對象建立SessionFactory對象

2.    SessionFactory 對象中儲存了目前的資料庫配置資訊和所有映射關系以及預定義的SQL語句。

3.    SessionFactory還負責維護Hibernate的二級緩存。

4.    SessionFactory對象的建立會有較大的開銷,而且SessionFactory對象采取了線程安全的設計方式,是以在實際中SessionFactory對象可以盡量的共享,在大多數情況下,一個應用中針對一個資料庫可以共享一個SessionFactory執行個體

SessionFactory建立代碼如下:

Configuration config =     new Configuration().configure();

SessionFactory factory = config.buildSessionFactory();

Session (org.hibernate.Session)

表示應用程式與持久儲存層之間互動操作的一個單線程對象,此對象生存期很短。其隐藏了

JDBC  連接配接,也是  Transaction  的工廠。它會持有一個針對持久化對象的必選(第一級)緩存,在周遊對象圖或者根據持久化辨別查找對象時會用到。

Session定義了添加、更新、删除和查詢等操作,是持久化操作的基礎。Session的設計是非線程安全的,是以,一個Session對象隻可以由一個線程使用。

Session對象可以由SessionFactory對象建立。

    Session session = factory.openSession();

Transaction

将應用代碼從底層的事務實作中抽象出來——這可能是一個JDBC事務,一個JTA使用者事務或者甚至是一個公共對象請求代理結構(CORBA)——允許應用通過一組一緻的API控制事務邊界。

使用Hibernate進行操作時(增、删、改)必須顯示的調用Transaction(預設:autoCommit=false)

    Transaction tx = session.beginTransaction();

Hibernate對象的狀态和生命周期

hibernate架構的核心對象和相關知識點
hibernate架構的核心對象和相關知識點

◦    注意:  

◦    使用debug詳細觀察程式運作,加深了解。

Transient 瞬時/臨時态

}    使用new 操作符初始化的對象不是立刻就持久的。

}    跟session沒有任何關系

}    跟資料庫沒有任何關系,資料庫中沒有對應記錄存在

Persist 持久态

}    和session對象相關。以map形式存入到session中

}    在資料庫中有對應的記錄

Detached托管/遊離态

}    和session對象無關

遊離态,托管态的經典案例

學生對班級的模型,多對一模型。班級端放棄關系的維護權,學生端維護

案例:修改學生資訊的時候,如何維護與班級的關系

    新傳入的student對象中的班級引用為空,如果直接update儲存關系丢失。

    需要進行關系維護。

    先從資料庫中查出原先該id對應的學生對象。将班級取出,與新的student建立關系。

    由于原先的和新修改的id相同,hibernate會報異常。則必須将原先的從持久态變成遊離态。再儲存新的student對象

hibernate架構的核心對象和相關知識點
hibernate架構的核心對象和相關知識點

View Code