hql抓取要注意的点
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抓取要注意的点的更多相关文章
- 【Java EE 学习 48】【Hibernate学习第五天】【抓取策略】【二级缓存】【HQL】
一.抓取策略. 1.hibernate中提供了三种抓取策略. (1)连接抓取(Join Fetch):这种抓取方式是默认的抓取方式.使用这种抓取方式hibernate会在select中内连接的方式获取 ...
- 【Hibernate 8】Hibernate的调优方法:抓取策略
在上一篇博客中,介绍了Hibernate的缓存机制.合理的配置缓存,可以极大程度上优化Hibernate的性能.这篇博客,介绍另外一个调优方式:抓取策略. 一.什么是抓取策略 抓取策略(fetchin ...
- 029 hibernate抓取策略
实例A引用实例B,B如果是代理的话(比如多对一关联中):如果遍历A的查询结果集(假设有10条记录),在遍历A的时候,访问B变量,将会导致n次查询语句的发出!这个时候,如果在B一端的class上配置ba ...
- Hibernate框架笔记04HQL_QBC查询详解_抓取策略优化机制
目录 1. Hibernate的查询方式 1.1 方式一:OID查询 1.2 方式二:对象导航查询 1.3 方式三:HQL方式 1.4 方式四:QBC查询 1.5 方式五:SQL查询 2. 环境搭建 ...
- hibernate框架学习之数据抓取(加载)策略helloworld
package cn.itcast.h3.query.hql; import java.util.List; import org.hibernate.Query; import org.hibern ...
- hibernate框架学习之数据抓取(加载)策略
Hibernate获取数据方式 lHibernate提供了多种方式获取数据 •load方法获取数据 •get方法获取数据 •Query/ Criteria对象获取数据 lHibernate获取的数据分 ...
- Hibernate 抓取策略
抓取策略: 为了改变SQL语句执行的方式 当应用程序需要在Hibernate实体对象的关联关系间进行导航的时候,Hibernate如何获取关联对象的策略 抓取策略可以在O/R映射的元数据中声明,也可以 ...
- hibernate的延迟加载和抓取策略
一,延迟加载 1.实体类延迟加载 通过代理机制完成,由javassist类库实现运行时代理,修改实体类的字节码实现了运行时代理 <class lazy="true|false& ...
- Hibernate fetching strategies(抓取策略)
抓取策略(fetching strategies)是指:当应用程序需要在(Hibernate实体对象图的)关联关系间进行导航的时候,Hibernate如何获取关联对象的策略.抓取策略可以在O/R映射的 ...
随机推荐
- 【java】异常和处理
(根据http://www.imooc.com/learn/110 陈码农老师教学视频总结) 一.异常体系结构 所有不正常类都继承于Throwable类 1.异常两个子类 error & ...
- Unity 5 中的全局光照技术详解(建议收藏)
本文整理自Unity全球官方网站,原文:UNITY 5 - LIGHTING AND RENDERING (文章较长,请耐心阅读)简介全局光照,简称GI,是一个用来模拟光的互动和反弹等复杂行为的算法, ...
- linux笔记:linux常用命令-压缩解压命令
压缩解压命令:gzip(压缩文件,不保留原文件.这个命令不能压缩目录) 压缩解压命令:gunzip(解压.gz的压缩文件) 压缩解压命令:tar(打包压缩目录或者解压压缩文件.打包的意思是把目录打包成 ...
- 能源项目xml文件 -- app-context.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- [saiku] 集成单点登录
思路: 自定义一个loginCallbackFilter用于单点登录成功后执行模拟用户认证授权登录的操作. 当授权成功后所有配置需要授权才能访问的url就再也不会被任何filter拦截,可随意访问了. ...
- 20150206读书笔记<深入理解计算机系统>
●第一章 C是系统级编程的首选.C++显示支持抽象,属于应用级程序设计语言. 简单例子: 一个典型系统的硬件组成: 存储器的层次结构: 注:存储器层次结构的设计思想是,该层存储器作为下一层存储器的高速 ...
- prepareStatement和Statement的区别
1:创建时的区别: Statement stm=con.createStatement(); PreparedStatement pstm=con.prepareStatement(sql ...
- ASP.NET Web API中的依赖注入
什么是依赖注入 依赖,就是一个对象需要的另一个对象,比如说,这是我们通常定义的一个用来处理数据访问的存储,让我们用一个例子来解释,首先,定义一个领域模型如下: namespace Pattern.DI ...
- <<薪资至少10K的一道题,你能拿下吗>>练习
偶尔要写写算法,是我平时用来保持感觉的常用的方法.今天看到园子里一面试题,看了一下感觉也能实现,不过过程确实艰的,自认为自己对算法的感觉还不错.不过这题确实我也用了差不多一下午的时间,基本上把工作时间 ...
- lucene底层数据结构——FST,针对field使用列存储,delta encode压缩doc ids数组,LZ4压缩算法
参考: http://www.slideshare.net/lucenerevolution/what-is-inaluceneagrandfinal http://www.slideshare.ne ...