Hibernate-延迟加载和立即加载

延迟加载:延迟加载(lazy load懒加载)是当在真正需要数据时,才执行SQL语句进行查询,避免了无谓的性能开销。
 延迟加载分类:
 01.类级别的查询策略
 02.一对多和多对多关联的查询策略
 03.多对一关联的查询策略

如果程序加载一个对象的目的是为了访问它的属性,可采取立即检索,如果程序加载一个持久化对象的目的仅仅为了获取它的引用,可采用延迟检索。

1.类级别可选的检索策略包括立即检索和延迟检索,默认为延迟检索
   1.1立即检索:立即加载检索方法指定的对象,立即发送SQL
   1.2 延迟检索:延迟加载检索方法制定的对象.在使用具体的属性时,再进行加载,才发送SQL

2.无论<class>元素的lazy属性是true还是false,Session的get()方法及Query的list()方法在类级别总是使用立即检索策略

3.若<class>元素的lazy属性为true或默认值,Session的load()方法不会执行查询数据库表的SELECT语句,仅返回代理类对象的实例,该代理类实例有如下特征:
  3.1 由Hibernate在运行时采用CGLIB工具动态生成
  3.2 Hibernate创建代理类实例时,仅初始化其OID属性
   3.3在应用程序第一次访问代理类实例的非OID属性时,Hibernate会初始化代理类实例
    3.4注意:类级别检索策略仅适用于load()方法

在配置中:

1.loud---创建加载

时间: 2024-10-11 21:37:51

Hibernate-延迟加载和立即加载的相关文章

hibernate延迟加载(懒加载)详解

Hibernae 的延迟加载是一个非常常用的技术,实体的集合属性默认会被延迟加载,实体所关联的实体默认也会被延迟加载.Hibernate 通过这种延迟加载来降低系统的内存开销,从而保证 Hibernate 的运行性能. 下面先来剖析 Hibernate 延迟加载的"秘密". 集合属性的延迟加载 当 Hibernate 从数据库中初始化某个持久化实体时,该实体的集合属性是否随持久化类一起初始化呢?如果集合属性里包含十万,甚至百万的记录,在初始化持久化实体的同时, 完成所有集合属性的抓取,

Hibernate检索策略之延迟加载和立即加载

延迟加载:延迟加载(lazy load懒加载)是当在真正需要数据时,才执行SQL语句进行查询.避免了无谓的性能开销. 延迟加载分类:  1.类级别的查询策略 2.一对多和多对多关联的查询策略 3.多对一关联的查询策略 什么情况下使用延迟加载? 如果程序加载一个对象的目的是为了访问它的属性,可以采用立即加载.如果程序加载一个持久化对象的目的是仅仅为了获得它的引用,可以采用延迟加载. 如何配置延时加载? 在Hibernate中通过对.hbm的lazy属性来赋值,不同位置出现lazy的作用和取值也是不

解决hibernate中的懒加载(延迟加载)问题

解决hibernate中的懒加载(延迟加载)问题 我们在开发的时候经常会遇到延迟加载问题,在实体映射时,多对一和多对多中,多的一样的属性默认是lazy="true"(即,默认是延迟加载), 如:<many-to-one name="parent" class="Department" column="parentId" lazy="true"/> 延迟加载表现在:比如:我们要查询id为2的部门数

NHibernate 延迟加载与立即加载 (第七篇)

NHibernate 延迟加载与立即加载 (第七篇) 一.延迟加载 延迟加载可以理解为:当需要用的时候才加载. 假设我们数据库有一个Person对象,一个Country对象,其中Person属于Country,一对多关系.当我们Get()一个 Person对象的时候.并不立即把Country对象也加入来,而是当我们的代码执行到要通过Person调用Country对象的时 候,NHibernate才到数据库去查询对应的Country对象,这就叫延迟加载.相反,如果我们Get()一个Person对象

分享:“延迟加载与预加载”使用体会

注:文章以Linq to Entities 讲解 接触mvc+ef开发一年时间左右了,之前一直处于使用状态,对ef里面的一些概念并没有太多的研究,在解决问题的过程中有些疑问一直逗留在脑海中,现在稍微可以空下来查查资料并整理下了. 什么是"延迟加载"和"预加载"?听上去好像很拽的样子. 延迟加载: 老大最初给我的解释--"当使用到的时候才去加载,比如:ToList().ToDictionary()的时候",自己也简单的百度过一下,做过一些简单的测试

Hibernate 检索策略之延迟加载和立即加载

我们或多或少会听说过延迟加载这个名词,但是今天我们来深入的了解它的用处以及分类  首先呢,我们先来说一下它的定义: 延迟加载(lazy load懒加载)是当在真正需要数据(调用真正的属性和方法来处理数据时)时,才执行SQL语句进行查询.避免了无谓的性能开销. 延迟加载分类: 01.类级别的查询策略 02.一对多和多对多关联的查询策略 03.多对一关联的查询策略 Lazy:决定关联对象初始化时机 1.类级别的默认加载策略是延迟加载 以下两种方式都表示采用延迟加载策略 举例:<class name=

Hibernate的延迟加载 ,懒加载,lazy

Hibernate延迟加载有很多配置方法,本文主要说明几种常用的配置方法,以及在Session的get()和load()方法,Query对象的iterator()和list()方法中的效果.下面是本例用到的两张表.实体类和配置信息: Company表: Employee表(employee_company_id为外键) Company实体类: import java.util.Set; public class Company {    private int companyId;    pri

Hibernate学习笔记-懒加载Lazy-true

1. 懒加载概述以及使用情景 描述:懒加载(lazy),简单说就是延时.延迟加载. 情景:在Hibernate框架应用中,就是当我们要访问的数据量过大时,使用缓存并不太合适,因为内存容量有限 ,为了减少系统资源的消耗,减少并发量,这时需要用懒加载机制来弥补这种缺陷,但是这并不意味用了懒加载总体性能就提高了. 应用: 比如学校school和学生student,学校与学生1对多,如果lazy设置为 false,那么只要加载了一个学校的信息,就会根据一对多配置的关系把所有学生的信息也加载出来.但是实际

hibernate源码-配置文件加载过程分析

Hibernate建议,在一个应用系统当中Configuration与SessionFactory为单例,Session为多例. 当我们执行如下代码,hibernate开始加载默认的配置文件 new Configuration().configure() hibernate会在classath的根路径下,查找名为"hibernate.cfg.xml" 的配置文件,并解析它,过程如图1所示 图1:配置文件加载过程时序图 下面一起分析一下配置文件加载过程 Step 1.Configurat

linq之延迟加载和即时加载+标准查询运算符

延迟加载 Linq查询的执行结果是IEnumerable<T>类型,而对IEnumerable<T>,在内部,C#通过yield关键字实现迭代器达到延迟加载的目的.从而使Linq查询只是在需要的时候才会被执行.  where Where方法是一个典型的延迟加载案例,在EF的框架中,where方法每次调用都在是在后续生成SQL语句时增加查询条件,EF无法确定本次查询是否已经添加结束,所以没有在方法执行的时候最终确定SQL语句,只能返回一个DbQuery对象,当用这个对象的时候,才会最