大致说来,hibernate提供了3中检索策略:
1、立即检索:在<class> , <set> ,和<many-to-one>元素中,”lazy“属性设为false,即立即加载,
2、延迟检索:在<class>元素中,lazy=true;在<set>中,lazy=true或者extra;在<many-to-one>中,lazy为“proxy”或者“no-proxy”。
3、迫切做外连接检索:在<set>和<many-to-one>元素中,fetch=“join”。class中无此属性。
一般来说,立即检索(lazy=false)会加载所有关联对象,并执行其关联语句,有时有必要,有时则没有必要,在性能上比较吃紧,所以一般使用它时,一定要注意使用场景和需求。
延迟检索(lazy=true),不会加载器关联对象,性能较高,但在加载关联对象属性时,会报错。
迫切做外连接(fetch=_)会加载关联对象,并只执行一条关联语句,在特定情况下使用。
在<class> <property> <set>和<many-to-one>中都有lazy属性,他们的默认值依次为:true,false,true,proxy。
下面是几种策略的优缺点的比较,以及各自适用的场合。
检索策略 | 优点 | 缺点 | 优先考虑使用的场合 |
立即检索 | 对应用程序完全透明,不管对象处于持久态还是游离态,应用程序都可以方便的从一个对象导航到他的关联对象。 | (1)select语句数目多(2)可能加载不需要访问的对象,浪费内存空间。 | (1)类级别(2)应用程序需要立即访问的对象(3)使用了二级缓存 |
延迟检索 | 由程序决定加载的对象,可以避免多个select语句,避免去加载不需要访问的关联对象,以此提高检索性能。 | 程序访问其关联对象属性时,不能保证其是否在持久化时已经被初始化。 | (1)一对多或者多对多关联(2)应用不需要立即访问的对象。 |
迫切做外连接检索 | 综合以上两种检索方式的优点。 | (1)可能加载不需要访问的关联对象。(2)复杂的数据库表连接会影响性能。 | (1)多对一或者一对一关联(2)程序需要立即访问的对象(3)数据库系统有良好的表连接性能 |
相关推荐
介绍了HIBERNATE的检索策略,可以此作为指引进行学习
Hibernate的检索策略包括类级别检索策略和关联级别检索策略。
Hibernate框架知识点的梳理;对HQL检索、检索策略、以及如何配置详细的进行描述
hibernate3学习总结hibernate3学习总结hibernate3学习总结hibernate3学习总结
hibernate5--4.检索方式及策略
Hibernate注解用法总结
NULL 博文链接:https://alpha2009.iteye.com/blog/1074750
java-Hibernate 检索
常用Hibernate主键生成策略 常用Hibernate主键生成策略 常用Hibernate主键生成策略 常用Hibernate主键生成策略
关于 Hibernate 的学习总结ppt 内包含了 inverse 的看法与eclipse安装 Hibernate 插件
关于对Hibernate关联映射的一个总结,其中有各种映射的例子,详细用法 等
hibernate开发的关系: one-to-one,many-to-one,many-to-many学习经验总结
hibernate面试题总结
hibernateSpring总结hibernateSpring总结
Hibernate数据检索(HQL)笔记Hibernate数据检索(HQL)笔记Hibernate数据检索(HQL)笔记Hibernate数据检索(HQL)笔记
NULL 博文链接:https://taomujian.iteye.com/blog/338342
hibernate学习总结文档,帮助快速入门
魔乐科技,李兴华老师的Hibernate教程笔记,对Hibernate的基础知识进行了比较详细的讲解,对初学者有一个比较笼统的介绍,是带我们入门Hibernate的不二选择。
关于Hibernate的各种主键生成策略与配置详解
hibernate抓取策略和懒加载案例,供大家下载查看。大家都知道,hibernate都设计到一个优化问题。