Hibernate 检索策略

原创 2007年10月11日 11:15:00

     在默认情况下,当Hibernate从数据库中加载对象时,会同时加载所有关联的对象. 但实际应用中可能不需要使用其关联的对象,这样就可能通过设置Hibernate的检索策略,来优化检索性能.

    Hiberante提供了3种检索策略:1)立即检索 2)延迟检索 3)迫切左外连接检索

   下面先从概念上去理解,先在脑袋中有个印象,看到了这样的用法知道是怎么回事,它在做什么.为什么这样做.
真正的理解要在以后的项目经验中慢慢去体会,

下表列出了类级别和关联级别可选的检索策略,以及默认的检索策略.

检索策略的作用域 可选的检索策略 默认的检索策略 运行时受影响的Session的检索方法
类级别 立即检索
延迟检索
立即检索 仅影响load()方法
关联级别 立即检索
延迟检索
多对一和一对一关联为外连接检索 影响load(),get()和find()方法
  迫切左外连接检索 一对多和多对多关联为立即检索  

下表列出了 3种检索策略的运行机制

检索策略的类型 类级别 关联级别
立即检索 立即加载检索方法指定的对象 立即加载与检索方法指定的对象关联的对象.可以设定批量检索数量
延迟检索 延迟加载检索方法指定的对象 延迟加载与检索方法指定的对象关联的对象.可以设定批量检索数量
迫切左外连接检索 不适用 通过左外连接加载与检索方法指定的对象关联的对象

下表列出了映射文件中用于设定检索策略的几个属性

属性 可选值 默认值 描述
lazy  true, false false

如果为true,表示使用延迟检索策略.在<class>和<set>元素中包含此属性

outer-join auto. true, false 在<many-to-one>和<one-to-one>元素中为auto;在<set>元素中为false 如果为true,表示使用迫切左外连接检索策略.在<many-to-one>.<one-to-one>和<set>元素中包含此属性
batch-size 正整数 1 设定批量检索的数量.如果设定此项,合理的取值在3~10之间.仅适用于关联级别的立即检索和延迟检索.在<class>和<set>元素中包含此属性

下表比较Hiberante的三种检索策略

检索策略 优点 缺点 优先考虑使用的场合
立即检索 对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便地从一个对象导航到与它关联的对象 (1)select 语句数目多
(2)可能会加载应用程序不需要访问的对象,白白浪费许多内存空间
(1)类级别
(2)应用程序需要立即访问的对象
(3)使用了第二级缓存
延迟检索 由应用程序决定需要加载那些对象,可以避免执行多余的select语句,以及避免加载应用程序不需要访问的对象.因此能提高检索性能,并且能节省内存空间 应用程序如果希望访问游离状态的代理类实例,必须保证它在持久化状态已经被初始化

(1)一对多或者多对多关联
(2)应用程序不需要立即访问或者根本不会访问的对象

迫切左外连接检索 (1)对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便地从一个对象导航到与它关联的对象
(2)使用了外连接,select语句数目少
(1)可能会加载应用程序不需要访问的对象,白白浪费许多内存空间
(2)复杂的数据库表连接也会影响检索性能
(1)多对一或者一对一关联
(2)应用程序需要立即访问的对象
(3)数据库系统具有良好的表连接性能

Hibernate检索策略与检索方式

Hibernate的Session在加载Java对象时,一般都会把鱼这个对象相关联的其他Java对象也都加载到缓存中,以方便程序的调用。但很多情况下,我们不需要加载太多无用的对象到缓存中,一来会占用大...
  • happylee6688
  • happylee6688
  • 2013年12月20日 10:58
  • 2446

Hibernate(十四)Hibernate三种检索方式详解

Hibernate检索机制中主要分为三种,他们各自有各自的好处和缺点,他主要分为以下三种: 1.立即检索策略  2.延迟检索策略  3.左外连接检索策略  立即...
  • u014654942
  • u014654942
  • 2014年08月21日 14:12
  • 1381

hibernate检索方式与检索策略

hibernate检索方式与检索策略
  • MaoFachang
  • MaoFachang
  • 2017年01月02日 21:13
  • 113

Hibernate检索策略之类级别检索策略

1.立即检索:当执行到session.load(Class,Index)语句时,立即执行了Sql语句操作。 2.延迟检索:当执行到session.load(Class,Index)语句时,没有立即执行...
  • xuxiaocheng1
  • xuxiaocheng1
  • 2013年08月05日 14:43
  • 550

Hibernate检索策略和检索方式

1 Hibernate的检索策略 Hibernate的检索策略分为两个级别: 类级别的检索策略:立即检索、延迟检索。关联级别的检索策略:立即检索、延迟检索还是迫切左外连接检索。 注意:在类级...
  • sunzhifeng1989
  • sunzhifeng1989
  • 2014年01月23日 12:24
  • 682

Hibernate检索策略

Hibernate检索策略      它是为了让我们的查询更加的有效率,是优化我们查询用的。 它是靠配置的方式来实现的 延迟加载      延迟加载(lazy load)...
  • q547550831
  • q547550831
  • 2016年11月24日 21:41
  • 577

hibernate的检索策略

Hibernate检索策略:   立即检索、延迟检索、迫切左外连接检索   Hibernate检索策略应用对象级别   类级别、关联级别   以下表格为类级别和关联级别可选的检索策略及默认的检...
  • guo_net
  • guo_net
  • 2014年07月31日 15:50
  • 506

Hibernate配置---检索策略

Hibernate是一个持久层的框架,不依赖任何容器,支持对象到数据库表的映射,ORM。 支持开发中的增删改查操作,将基本的JDBC操作进行封装,可以通过配置hibernate.cfg.xml来方便的...
  • kkkennn
  • kkkennn
  • 2014年02月02日 12:51
  • 419

Hibernate 三种检索策略

1)立即检索 优点:对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便的从一个对象导航到与它关联的对象; 缺点: (1)select语句太多;             ...
  • hlx20080808
  • hlx20080808
  • 2016年12月01日 11:04
  • 102

Hibernate的检索(抓取)策略

1、 建立模拟数据  ---- 建立3个Customer 和 30个Order(每个客户10个订单) 2、 立即检索和延迟检索          立即检索: 立即加载检索方法指定的对象    ...
  • u011428274
  • u011428274
  • 2013年07月22日 09:31
  • 1131
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate 检索策略
举报原因:
原因补充:

(最多只允许输入30个字)