Hibernate的检索策略
Hibernate的Session在加载一个Java对象时,可以将与这个对象相关联的其他Java对象都加载到缓存中,以便程序及时调用。但有些情况下,我们不需要加载太多无用的对象到缓存中,一来这样会撑爆内存,二来增加了访问数据库的次数。所以为了合理的使用缓存,Hibernate提供了几种检索策略来供用户选择。
Hibernate的检索策略
在Hibernate中主要有三种检索策略,它们是立即检索策略、延迟检索策略、左外连接检索策略。下面分别介绍一下这三种检索策略。
立即检索策略:
采用立即检索策略,会将被检索的对象,以及和这个对象关联的一对多对象都加载到缓存中。Session的get方法就使用的立即检索策略。
优点:频繁使用的关联对象能够被加载到缓存中。
缺点:1、占用内存。2、Select语句过多。
延迟检索策略:
采用延迟检索策略,就不会加载关联对象的内容。直到第一次调用关联对象时,才去加载关联对象。在不涉及关联类操作时,延迟检索策略只适用于Session的load方法。涉及关联类操作时,延迟检索策略也能够适用于get,list等操作。
在类级别操作时, 延迟检索策略,只加载类的OID不加载类的其他属性,只用当第一次访问其他属性时,才回访问数据库去加载内容。(这里使用了CGLIB生成了类的代理类)
在关联级别操作时,延迟检索策略,只加载类本身,不加载关联类,直到第一次调用关联对象时,才去加载关联对象
程序模式都是用延迟加载策略。如果需要指定使用延迟加载策略。在配置文件中设置<class>的lazy=true,<set>的lazy=true或extra(增强延迟)<many-to-one>的lazy=proxy和no-proxy。
优点:由程序决定加载哪些类和内容,避免了大量无用的sql语句和内存消耗。
缺点:在Session关闭后,就不能访问关联类对象了。 需要确保在Session.close方法前,调用关联对象。
左外连接检索策略:
采用左外连接检索,能够使用Sql的外连接查询,将需要加载的关联对象加载在缓存中。
<set>fetch设置为join,<many-to-one>的fetch设置为 join
优点:1.对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便的从一个对象导航到与它关联的对象。2.使用了外连接,select语句数目少。
缺点:1.可能会加载应用程序不需要访问的对象,白白浪费许多内存空间。2.复杂的数据库表连接也会影响检索性能。
batch-size属性:
无论是立即检索还是延迟检索,都可以指定关联查询的数量,这就需要使用batch-size属性来指定,指定关联查询数量,以减少批量检索的数据数目。
转载于:https://www.cnblogs.com/wukong0214/archive/2013/01/23/2874026.html
Hibernate的检索策略相关推荐
- Hibernate之检索策略
1.概述 检索数据时的2个问题: 不浪费内存:当Hibernate从数据库中加载Customer对象时,如果同时加载所有关联的Order对象,而程序仅仅需要访问Customer对象,那么关联的Orde ...
- Hibernate框架--学习笔记(下):hibernate的查询方式、多表查询、检索策略、批量抓取
一.hibernate的查询方式: 主要有五种:对象导航查询:OID查询:hql查询:QBC查询:本地sql查询. 1.对象导航查询:根据id查询某个客户,再查询这个客户里面所有的联系人. 2.OID ...
- hibernate 插入 效率_Hibernate:检索策略的学习1
概述 检索数据,也就是查询数据是在一个系统中必不可少的一个功能.检索数据时的2个问题: 不浪费内存:例如,Customer和Order是双向1-N的关系.当 Hibernate 从数据库中加载 Cus ...
- (九)Hibernate 检索策略
所有项目导入对应的hibernate的jar包.mysql的jar包和添加每次都需要用到的HibernateUtil.java 这里的hibernate.cfg.xml配置信息我就不再写了 第一节:检 ...
- 10、Hibernate的对象检索策略
- 立即检索策略 - 延迟检索策略 - 左外连接检索策略 - 每种检索策略的适用范围 - 在程序中显式指定左外连接检索策略 表字段之间的对应关系 1.运行Session的方法 List custome ...
- Hibernate的三种检索策略
1 N+1问题 Hibernate的Session缓存中存放的是相互关联的对象图,默认情况下,当从数据库中加载一个对象的时候,会同时加载它所关联的其他对象.例如:Clazz(班级)跟Student(学 ...
- JAVAWEB开发之Hibernate详解(三)——Hibernate的检索方式、抓取策略以及利用二级缓存进行优化、解决数据库事务并发问题
Hibernate的检索方式 Hibernate提供了以下几种检索对象的方式: 导航对象图检索方式:根据已经加载的对象导航到其他对象. OID检索方式:按照对象的OID来检索对象. HQL检索方式: ...
- Hibernate学习(八)———— Hibernate检索策略(类级别,关联级别,批量检索)详解...
序言 很多看起来很难的东西其实并不难,关键是看自己是否花费了时间和精力去看,如果一个东西你能看得懂,同样的,别人也能看得懂,体现不出和别人的差距,所以当你觉得自己看了很多书或者学了很多东西的时候,你要 ...
- Hibernate之检索方式(HQL/QBC/本地SQL)
一.概述 Hibernate提供了以下几种检索对象的方式 导航对象图:根据已经加载的对象导航到其它对象 OID:按照对象的OID来检索对象 HQL:使用面向对象的HQL查询语句 QBC:使用QBC(Q ...
最新文章
- eclipse序列化生成serialVersionUID
- sql 2005判断某个表或某个表中的列是否存在
- MySQL的ODBC安装错误问题!
- JQuery DataTables改变行或列的背景或字体颜色
- python中groupby()函数讲解与示例_详解python中groupby函数通俗易懂
- 16节课搞懂大数据,视频教程限时免费领取
- 泛型 (Generics)一定是最易懂简单的
- 59. 预定义超全局变量
- PHP项目汇报ppt模板,免费工作汇报模板(课堂PPT)
- win7 系统激活工具 亲测可行
- 数据库报duplicate XXX entry for key primary错误的可能原因以及解决方法
- 最长单词 c++实现
- fastboot 刷机前面遇到的坑
- BIOS设置与硬盘分区
- ai若无声,我宁沉默夜寂无声,伊人浅唱。
- 二进制位两数相加,加数补码的合理取值范围
- oracle bulk collect into,BULK COLLECT INTO
- status 401 reading SysUserService#login(Stri
- Win11怎么查看计算机历史记录?
- 思科学院cisco-基本网络连接和通信