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检索方式——与数据库绑定