1 Hibernate的檢索策略
Hibernate的檢索策略分爲兩個級別:
- 類級別的檢索策略:立即檢索、延遲檢索。
- 關聯級別的檢索策略:立即檢索、延遲檢索還是迫切左外連接檢索。
注意:在類級別上,Session的load()方法可以實現延遲檢索,但是Session的get()和Query接口的list()總是立即檢索。
檢索策略運行機制如圖1-1所示:
圖1-1 檢索策略
在ORM映射文件中可以設置檢索策略:
<class>、<set>、<many-to-one>元素的lazy屬性設置檢索策略,另外<set>、<many-to-one>的fetch屬性,如圖1-2所示:
圖1-2 檢索策略設置
另外,<one-to-one>設置延遲檢索的方式爲:屬性constrained="true"。
採用延遲檢索返回的是代理類的實例:
- Hibernate在運行時動態生成,繼承了要檢索類的所有屬性和方法。
- 僅初始化了OID屬性
- 第一次訪問此代理類時(getId()方法除外),Hibrenate對其進行初始化,從數據庫中加載對象的數據。
2 Hibernate的檢索方式
- HQL檢索方式——最爲常用,跨平臺
- QBC檢索方式——跨平臺
- SQL檢索方式——與數據庫綁定