fetchtype是lazy,那就用到了在通过缓存中的关联去取,用不到不取;lazy遇到joinfetch就失去意义,但是由于hql语句是自己编写的,可以控制加不加fetch 所以如果主力是hql语句,可以考虑lazy+hql的组合

多取一,fetchtype是eager,HQL一定要加fetch,因为不加的话即使用不到关联对象也会一次取出,而且还发出很多条语句;

HQL查询的时候一定要和sql语句结合在一起考虑问题,时刻考虑到缓存,就会很容易明白一个HQL会去数据库查询几次。

两个表(或者两个对象)join完之后,再取对象还是数据,要看join完之后的表示啥样的,就可以知道取出来是什么了,一般是用innerjoin,特殊情况下要保留某一个表的多余数据可以考虑right或者leftjoin

语句中只有join,不一定会取关联对象,或者叫被join的对象;而加了fetch,那么就是把整张表的数据全按照对象的格式取出来放到缓存中。

joinfetch的时候select的对象一定是主join的那个对象

多对一用fetchtype.eager之后,一的那方不要再用eager了,不然回头再取一次多的一方一次。

分页的时候要用count(*)取总数,所以这时候要把hql语句中的fetch替换掉。

fetchmode=subselect 用于从一的一方关联取多的一方,用不到不取,用到了用嵌套取,一次把几个组的全取出来。而不是像lazy或者eager那样一个组一个组的取,语句少,较智能。几个组的一取多,也分是几个组的一起取还是一个组一个组去,这就是用不用subselect的区别。

batchsize 只在从"多"的一方取"一"的一方有效,在一的一方标注一次取多少。因为从一的一方取,不管下属多少条都会一下取出来,不会说一个group有30条user,但是先取29个再取1个这样的,只会一次getUsers把所有User取出来。

在注解模式中,fetchmode 和fetchtype 除去subselect,其实是逻辑或的关系,只要两者中有一个是eager或者join,那么就是一次关联抓取。

hql抓取要注意的点的更多相关文章

  1. 【Java EE 学习 48】【Hibernate学习第五天】【抓取策略】【二级缓存】【HQL】

    一.抓取策略. 1.hibernate中提供了三种抓取策略. (1)连接抓取(Join Fetch):这种抓取方式是默认的抓取方式.使用这种抓取方式hibernate会在select中内连接的方式获取 ...

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

    在上一篇博客中,介绍了Hibernate的缓存机制.合理的配置缓存,可以极大程度上优化Hibernate的性能.这篇博客,介绍另外一个调优方式:抓取策略. 一.什么是抓取策略 抓取策略(fetchin ...

  3. 029 hibernate抓取策略

    实例A引用实例B,B如果是代理的话(比如多对一关联中):如果遍历A的查询结果集(假设有10条记录),在遍历A的时候,访问B变量,将会导致n次查询语句的发出!这个时候,如果在B一端的class上配置ba ...

  4. Hibernate框架笔记04HQL_QBC查询详解_抓取策略优化机制

    目录 1. Hibernate的查询方式 1.1 方式一:OID查询 1.2 方式二:对象导航查询 1.3 方式三:HQL方式 1.4 方式四:QBC查询 1.5 方式五:SQL查询 2. 环境搭建 ...

  5. hibernate框架学习之数据抓取(加载)策略helloworld

    package cn.itcast.h3.query.hql; import java.util.List; import org.hibernate.Query; import org.hibern ...

  6. hibernate框架学习之数据抓取(加载)策略

    Hibernate获取数据方式 lHibernate提供了多种方式获取数据 •load方法获取数据 •get方法获取数据 •Query/ Criteria对象获取数据 lHibernate获取的数据分 ...

  7. Hibernate 抓取策略

    抓取策略: 为了改变SQL语句执行的方式 当应用程序需要在Hibernate实体对象的关联关系间进行导航的时候,Hibernate如何获取关联对象的策略 抓取策略可以在O/R映射的元数据中声明,也可以 ...

  8. hibernate的延迟加载和抓取策略

    一,延迟加载 1.实体类延迟加载 通过代理机制完成,由javassist类库实现运行时代理,修改实体类的字节码实现了运行时代理     <class lazy="true|false& ...

  9. Hibernate fetching strategies(抓取策略)

    抓取策略(fetching strategies)是指:当应用程序需要在(Hibernate实体对象图的)关联关系间进行导航的时候,Hibernate如何获取关联对象的策略.抓取策略可以在O/R映射的 ...

随机推荐

  1. 使用ICMP协议Ping网络主机

    #coding:utf-8 #!/usr/bin/env python import os import argparse import socket import struct import sel ...

  2. 安卓虚拟机启动失败intel haxm未安装

    1:环境是android studio 在AVD中启动显示,提示当前电脑为安装HAXM emulator: ERROR: x86 emulation currently requires hardwa ...

  3. eclips引入Java源代码

    window->>preferences->>Java->Installed JRES 如图所示 这是中文本的 点击“Installed JRES”选择如下图所示的jdk ...

  4. VB6 GDI+ 入门教程[2] GDI+初始化

    http://vistaswx.com/blog/article/category/tutorial/page/2 VB6 GDI+ 入门教程[2] GDI+初始化 2009 年 6 月 18 日 7 ...

  5. xcode6 framework missing submodule xxx 警告

    xcode6 framework missing submodule xxx 警告 从xcode6开始,iOS可以直接创建生成framework了 如: 创建 framework 项目,TFKit.f ...

  6. RESEACH PAPER

      个,proquest的username和password赫然在目,别急,再看第4个结 果"HB Thompson Subscription Online Databases", ...

  7. jmeter 建立一个网络服务的测试计划

    如何创建一个 测试计划 测试一个网络服务. 你会 创建5个用户发送请求到一页. 同时,你会告诉用户运行测试两次. 的总数 请求用户请求(5)x(1)x(重复2次)= 10 HTTP请求. 来 建立测试 ...

  8. css样式初始化

    不同的浏览器对有些标签的默认显示是不同的,对css样式初始化可以实现样式的统一,消除不同浏览器间页面显示的差异性... 一般初始化方式为:*{margin:0:padding:0:}

  9. hdu---1506(Largest Rectangle in a Histogram/dp最大子矩阵)

    Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  10. HDU----(4549)M斐波那契数列(小费马引理+快速矩阵幂)

    M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Sub ...