Hibernate的检索策略
Hibernate提供了3种检索策略:
1.立即检索策略
2.延迟策略
3.迫切连接检索
立即检索:
所谓立即检索就是立即装载和初始化检索方法指定的对象,即使Session关闭了,依然可以被正常访问.立即检索策略的启用是通过在映射配置文件中将lazy属性值得设置为"false"来实现的.在Hibernate3.0中lazy的默认值为"true"(延迟检索),如果要启用立即检索策略,就必须手动将lazy设置为"false".
在ORM映射文件的<class>标签中设置lazy属性则表示该持久化类启用何种检索策略,如lazy="false"(立即检索)或lazy="true"(延迟检索).在类级别上,一般启用立即检索策略,因为在加载了持久化对象后会立即访问它.
在ORM映射文件的<set>标签中设置lazy属性则表示对该持久化类的关联对象启用何种检索策略,如lazy="false"(立即检索)lazy="true"(延迟检索).在类关联级别上,一般启用延迟检索策略,因为在加载了持久化对象后大多不会立即访问其关联对象,况且当关联对象数量巨大时,将其装载入内存开销也很大.为了减少查询次数,可以采用Hibernate的批量检索功能,即在<set>标签上设置batch-size属性值设定批量大小.
延迟检索:
延迟检索是Hibernate3.0默认的检索策略,所谓延迟检索就是等到访问的时候才装载和初始化指定的对象.如果在Session实例关闭之前没有初始化延迟检索出来的对象,Session实例关闭后再访问时,就会抛出异常,因此启用了延迟检索策略后,在访问指定对象前应确保该对象已被成功初始化.
在ORM映射文件的<class>标签设置lazy="true"则表示对该持久化类启用延迟检索策略,在<set>标签中设置lazy="true"则表示对该持久化类的关联对象启用延迟检索策略.
为了确保延迟检索的对象在Session关闭后仍然能被正常访问,可以使用Hibernate的isInitialized(Objectobj)
用于判断某对象是否被初始化,再用initialize(Objectobj)对指定的对象进行初始化处理.
迫切左外检索连接检索:
迫切左外连接检索策略就是充分利用SQL的外连接查询功能,减少Select语句的数目,提高检索效率.在Hibernate中若要启用迫切左外连接检索策略,只需要将所属标签的outer-join属性设置为"true"即可.