文档章节

Join和Fetch

猪刚烈
 猪刚烈
发布于 2014/10/12 11:40
字数 471
阅读 18
收藏 0

      join和join fetch是两回事,不要搞混! join取自SQL的join概念。被join的对象一般会出现在select,where等其他子句中。因为join的目的在于要对被join的对象做处理,比如过滤等等。

     fetch则是抓取策略!它的作用就是指明root entity的哪些关联对象会在load这个entity时一同被load出来!因此,fetch的对象一般是没有别名的(如果需要进一步抓取集合单个元素的关联对象时就必须使用别名了),因为它不会以查询结果直接返回,也不会在where子句对它们进行过滤,它们是通过返回的root entity导航得到!

     fetch 也不应该与 setMaxResults() 或 setFirstResult() 共用,这是因为这些操作是基于结果集的,而在预先抓取集合类时可能包含重复的数据,也就是说无法预先知道精确的行数。

     fetch 还不能与独立的 with 条件一起使用。通过在一次查询中 fetch 多个集合,可以制造出笛卡尔积,因此请多加注意。

     对 bag 映射来说,同时 join fetch 多个集合角色可能在某些情况下给出并非预期的结果,也请小心。最后注意,使用 full join fetch 与 right join fetch 是没有意义的。

     超大集合不能一次性加载!它们的配制应该是:lazy必须为true! 动态抓取进也不应该抓取它!目前来看,只能提供额外的接口来分批获取集合。比如Forum.getThreads(int firstThreadIndex, int threadCount)

 

 

关于join与fetch的两个例子

 

 

 

 

 

 

 

 

 

 

 如果想过滤join和fetch中的重复对象,有两种方法:

1.将续集里封装成set.比如:Set noDupes = new LinkedHashSet(resultList))

2.使用DISTINCT。比如:select distinct i from Item i join fetch i.bids

本文转载自:http://blog.csdn.net/bluishglc/article/details/5571403

共有 人打赏支持
猪刚烈
粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
私信 提问
many-to-one fetch属性理解(借用网络)

上次用来 Eclipselink 的 JPA 优化 Query 需要用到 EclipseLink 自己的 eclipselink.left-join-fetch 特 有的hint name 来 实现。 今天在用到 Hibernate 的 一个 many-to-one 的 的时候看到它...

馨缘6009
2013/09/10
0
0
解决hibernate left join fetch 出错的问题

解决hibernate left join fetch 出错的问题 今天写一个hql,其中用到了 left join fetch ,最后报错: //错误的写法: String hql = "select count(ar) from Article ar left join fetch ar.ch......

guhai2004
2013/10/20
0
3
hibernate fetch属性

Hibernate的fetch="join"和fetch="select" 的一点分析 fetch参数指定了关联对象抓取的方式是select查询还是join查询,select方式时先查询返回要查询的主体对象(列表),再根据关联外键id,每...

zdatbit
2016/07/18
14
0
Hibernate中distinct和group by用于去重时的区别

HQL语句如下 select distinct sub from PaperQuesSub sub join fetch sub.paperQues ques join fetch sub.paperQuesKns join fetch sub.paperQuesSks where ques.quesId=? group by sub.id ......

LuciusMa
2013/05/20
2.4K
0
去除外键的存储过程

create proce prdropforeignkeys @chvreferencedtable varchar(30) as declare @chvtablewithforeignkey varchar(30), @chvforeignkey varchar(30), @chvsql varchar(255) declare cufks cur......

xuefeng1989
2011/01/04
155
2

没有更多内容

加载失败,请刷新页面

加载更多

Ubuntu16.04下安装docker

[TOC] 本文开发环境为Ubuntu 16.04 LTS 64位系统,通过apt的docker官方源安装最新的Docker CE(Community Edition),即Docker社区版,是开发人员和小型团队的理想选择。 1. 开始安装 1.1 由于...

豫华商
今天
10
0
使用XShell工具密钥认证登录Linux系统

如果你是一名Linux运维,那么Linux服务器的系统安全问题,可能是你要考虑的,而系统登录方式有两种,密码和密钥。哪一种更加安全呢? 无疑是后者! 这里我为大家分享用Xshell利器使用密钥的方...

dragon_tech
今天
7
0
day178-2018-12-15-英语流利阅读-待学习

“真蛛奶茶”了解一下?蜘蛛也会产奶了 Lala 2018-12-15 1.今日导读 “蛋白质含量是牛奶的 4 倍,并有着更低的脂肪和含糖量”,听起来诱人又美味的并不是羊奶或豆奶,而是你可能打死都想不到...

飞鱼说编程
今天
12
0
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents

场景重现 npm install --verbose 安装依赖的时,出现如下警告 强迫症患者表示不能接受 npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.4 (node_modules\fsevents):npm WARN......

taadis
今天
2
0
OSChina 周六乱弹 —— 你一口我一口多咬一口是小狗

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文 :分享Roy Orbison的单曲《She's a Mystery to Me》 《She's a Mystery to Me》- Roy Orbison 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
464
6

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部