hibernate_06_hibernate的延迟加载和抓取策略

1.延迟加载

1>类级别的延迟加载

指的是通过oad方法查询某个对象的时候,是否采用延迟, session. load(Customer class1L)

类级别延迟加载通过<class></class>上的laxy进行配置,如果让lazy失效

    <class name="com.work.entity.Customer" table="cst_customer" lazy="true">

◆将lazy设置为 false.

◆将持久化类使用fna修饰

◆ Hibernate. Initialize()方法

2>关联级别的延迟加载

指的是在查询到某个对象的时候,查询其关联的对象的时候,是否采用延迟加载。

Customer customers=session. get( Customer.class, 1L)

customer. getlinkman0()一通过客户获得联系人的时候,联系人对象是否采用了延迟加载,称为是关联级别的延迟。

抓取策略往往会和关联级别的延迟加载一起使用,优化语句。

2.抓取策略的概述

1>抓取策略的通过一个对象抓取到关联对象需硬发送SQL语句,SOL语句如何发送,发送成什么样格式通过策略进行配置。

通过<set>或者< many-to-one>上通过 fetch属性进行设置fetch和这些标签上的lary如何设置优化发送的saL语句

<set>上的 fetch和layfetch

2>fatch抓取策略,控制SOL语句格式:(fatch控制发送语句的格式)

select :默认值,发送普通的 select语句,查询关联对象

join:发送一条迫切左外连接查询关联对象

subselect:发送一条子查询查询其关联对象

3>lazy延迟加载,控制查询关联对象的时侯是否采用延迟(lazy控制的是发送语句的时间

true:默认值,查询关联对象的时候,采用延迟加载

false:查询关联对象的时候,不采用延迟加载

extra:及其懒情。(用到什么数据查询什么数据)

<---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->

<many-to-one>上的 fetch和layfetch

1>fatch抓取策略,控制SOL语句格式:(fatch控制发送语句的格式)

select :默认值,发送普通的 select语句,查询关联对象

join:发送一条迫切左外连接查询关联对象

2>lazy延迟加载,控制查询关联对象的时侯是否采用延迟(lazy控制的是发送语句的时间

proxy:默认值,proxy的值取决于另一端<classs>lazy=""</class>lazy的值

false:查询关联对象的时候,不采用延迟加载

在开发中一般使用默认值:特殊情况下可能使用join

3.批量抓取策略

当我们关联查询所有客户以及所有客户下的所有联系人时会发送大量的查询语句,此时可以使用批量抓取策略

1>设置batch-size="4" 一次抓取的数据

<set name="linkMans" cascade="save-update,delete" batch-size="4" >

设置抓取策略之后(2条查询语句)

原文地址:https://www.cnblogs.com/asndxj/p/12071940.html

时间: 2024-10-28 22:08:31

hibernate_06_hibernate的延迟加载和抓取策略的相关文章

hibernate的延迟加载和抓取策略

一,延迟加载 1.实体类延迟加载 通过代理机制完成,由javassist类库实现运行时代理,修改实体类的字节码实现了运行时代理     <class lazy="true|false">     实体级别的延迟加载默认值为true,意味实体对象是延迟加载,只影响load方法.      <class lazy="true|false">其他查询方式都是立即加载              2.关联属性延迟加载 默认情况下除了<one-to

(转)hibernate 延迟加载和抓取策略

一.延迟加载 1.简单查询get,load 针对对象本身延迟或即时 当使用load方法来得到一个对象时,此时hibernate会使用延迟加载的机制来加载这个对象,即:当我们使用session.load()方法来加载一个对象时,此时并不会发出sql语句,当前得到的这个对象其实是一个代理对象,这个代理对象只保存了实体对象的id值,只有当我们要使用这个对象,得到其它属性时,这个时候才会发出sql语句,从数据库中去查询我们的对象. 相对于load的延迟加载方式,get就直接的多,当我们使用session

hibernate 延迟加载和抓取策略

一.延迟加载 1.简单查询get,load 针对对象本身延迟或即时 当使用load方法来得到一个对象时,此时hibernate会使用延迟加载的机制来加载这个对象,即:当我们使用session.load()方法来加载一个对象时,此时并不会发出sql语句,当前得到的这个对象其实是一个代理对象,这个代理对象只保存了实体对象的id值,只有当我们要使用这个对象,得到其它属性时,这个时候才会发出sql语句,从数据库中去查询我们的对象. 相对于load的延迟加载方式,get就直接的多,当我们使用session

八 Hibernate延迟加载&amp;抓取策略(优化)

面试:Hibernate效率很低,如何优化? 缓存怎么弄的,语句怎么优化? 聊聊一级缓存,聊聊抓取策略和延迟加载,聊聊批量抓取 延迟加载: 一般不单独使用,和延迟加载一起使用 延迟加载:lazy(懒加载) 执行到该行代码的时候不会发送语句,真正使用这个对象的属性的时候才会发送sql语句进行查询. 类级别延迟加载:指的是是通过load方法查询某个对象的时候是否采用延迟,通过class标签上的lazy来配置. 让类级别延迟加载失效:1 lazy设为false 2 final修饰 3 调用Hibern

Hibernate fetch 抓取策略

上一篇文章(Hibernate的延迟加载 ,懒加载,lazy)说到Hibernate的延迟加载跟fetch的配置还有一定关系,下面就来讨论下fetch的用法. 抓取策略(fetch)是指当我们去查询一个对象里面所关联的其他对象时,按照哪种方法去抓取关联对象. fetch策略一共有四种:select.subselect.join.batch,下面我们一一介绍.我们还是用上面介绍延迟加载的相关表和实体类. Company表: Employee表(employee_company_id为外键) Com

Hibernate学习笔记(八) — 懒加载与抓取策略

懒加载(Load On Demand)是一种独特而又强大的数据获取方法,它能够在用户滚动页面的时候自动获取更多的数据,而新得到的数据不会影响原有数据的显示,同时最大程度上减少服务器端的资源耗用.总结一句话:什么时候需要数据,什么时候加载. 一.懒加载 1.1 类的懒加载 由javassist产生的代理类与Classes类是继承关系, session.load()方法产生的是代理对象,该代理类是持久化类的子类 /** * 类的懒加载 */ @Test public void testClass_l

029 hibernate抓取策略

实例A引用实例B,B如果是代理的话(比如多对一关联中):如果遍历A的查询结果集(假设有10条记录),在遍历A的时候,访问B变量,将会导致n次查询语句的发出!这个时候,如果在B一端的class上配置batch-size,hibernate将会减少SQL语句的数量. Hibernate可以充分有效的使用批量抓取,也就是说,如果仅一个访问代理(或集合),那么hibernate将不载入其他未实例化代理.批量抓取是延迟查询抓取的优化方案,你可以在两种批量抓取方案之间进行选择:在类级别和集合级别. 类/实体

Hibernate 优化技术之抓取策略(Fetching strategies)

一.前言 转载请标明出处:http://blog.csdn.net/wlwlwlwl015/article/details/42705585 使用hibernate一年多了,一直觉得他是一个很好用的持久层框架,在处理含有多个复杂的关联关系的数据表时,hibernate提供的各种关联映射可以让我们用少量的代码快速.便捷的去维护各种外键关系,当然他的核心还是允许我们以"面向对象"的方式去操作数据表,因为我们的Java语言就是面向对象的,所以我们使用ORM的持久层框架应该更容易理解和上手,他

【Hibernate 8】Hibernate的调优方法:抓取策略

在上一篇博客中,介绍了Hibernate的缓存机制.合理的配置缓存,可以极大程度上优化Hibernate的性能.这篇博客,介绍另外一个调优方式:抓取策略. 一.什么是抓取策略 抓取策略(fetching strategy):当应用程序需要在关联关系间进行导航的时候,Hibernate如何获取关联对象的策略.抓取策略可以在O / R映射的元数据中声明,也可以在特定的HQL或条件查询(Criteria Query)中重载声明. 二.Hibernate的抓取策略 在Hibernate中,主要包括四种抓