HQL (迫切)左外连接
迫切左外连接:
LEFT JOIN FETCH 关键字表示迫切左外连接检索策略.
list() 方法返回的集合中存放实体对象的引用, 每个 Department 对象关联的 Employee 集合都被初始化, 存放所有关联的 Employee 的实体对象.
查询结果中可能会包含重复元素, 可以通过一个 HashSet 或 DISTINCT 关键字 来过滤重复元素
@Testpublic void testGedefffde(){String hqlString=" FROM Grade g LEFT JOIN FETCH g.students ";Query query=session.createQuery(hqlString);//这是第二种,去重方法List<Grade> list = query.list();list=new ArrayList<>(new LinkedHashSet(list));for(Grade grade: list)System.out.println(grade.getName()+"--"+grade.getGradeId()+"--"+grade.getStudents().size());}
注意:from 的表名是和cfg.xml对应,不是和数据库的对应。其余也是同样道理。
左外连接:
LEFT JOIN 关键字表示左外连接查询.
list() 方法返回的集合中存放的是对象数组类型
根据配置文件来决定 Employee 集合的检索策略.
如果希望 list() 方法返回的集合中仅包含 Department 对象, 可以在HQL 查询语句中使用 SELECT DISTINCT关键字,SELECT导致返回对象的引用,DISTINCT去重
@Testpublic void testGedefswffde(){//因为加上了select diatinct 关键字,返回对象 String hqlString="select distinct g FROM Grade g LEFT JOIN g.students ";Query query=session.createQuery(hqlString);List<Grade> list = query.list();for(Grade object:list){System.out.println(object.getName()+"---"+object.getStudents());}}
区别
- 两个查询方式所发送的sql语句是相同的,如下所示。
- 迫切连接的 fetch 关键字是告诉hibernate框架,将student的引用也直接初始化。
- 而且,迫切连接返回的是一个对象。但普通左外连接,就只是一个数组,需要加上select distinct 关键字后才能打包成对象。
- 普通左外连接没有初始化student,只有使用的时候才会真正初始化
selectdistinct grade0_.GRADE_ID as GRADE_ID1_1_,grade0_.NAME as NAME2_1_,grade0_.PERSON_SUM as PERSON_S3_1_ fromhibernate.GRADE grade0_ left outer joinhibernate.STUDENT students1_ on grade0_.GRADE_ID=students1_.GRADE
迫切内连接
INNER JOIN FETCH 关键字表示迫切内连接, 也可以省略 INNER 关键字
list() 方法返回的集合中存放 Department 对象的引用, 每个 Department 对象的 Employee 集合都被初始化, 存放所有关联的 Employee 对象
内连接:
INNER JOIN 关键字表示内连接, 也可以省略 INNER 关键字
list() 方法的集合中存放的每个元素对应查询结果的一条记录, 每个元素都是对象数组类型
如果希望 list() 方法的返回的集合仅包含 Department 对象, 可以在 HQL 查询语句中使用 SELECT DISTINCT关键字,SELECT导致返回对象的引用,DISTINCT去重
关联级别运行时的检索策略
如果在 HQL 中没有显式指定检索策略, 将使用映射文件配置的检索策略.
HQL 会忽略映射文件中设置的迫切左外连接检索策略, 如果希望 HQL 采用迫切左外连接策略, 就必须在 HQL 查询语句中显式的指定它
若在 HQL 代码中显式指定了检索策略, 就会覆盖映射文件中配置的检索策略
HQL (迫切)左外连接相关推荐
- Hibernate5-一对多双向关联-迫切左外连接-HQL
1.创建项目,项目名称hibernatedemo19,目录结构如图所示 2.在项目中创建lib目录存储jar文件,目录结构如图所示 3.在src目录中创建实体Bean Forum,包名(com.myc ...
- MySQL 学习笔记(15)— 连接查询(内连接、左外连接、右外连接、全外连接、交叉连接、自然连接等)
本文参考:https://gitbook.cn/gitchat/column/undefined/topic/5db92b68a9c3a53bc3800eff SQL 支持的连接查询包括内连接.外连接 ...
- Oracle 左外连接的一些測试
为了更加深入左外连接,我们做一些測试,外连接的写法有几种形式,我们能够通过10053跟踪到终于SQL转换的形式. --初始化数据 create table A ( id number, age ...
- SQL 四种连接:内连接、左外连接、右外连接、全连接--转载
原文:http://zwdsmileface.iteye.com/blog/2191730 个人理解 内连接(INNER JOIN)(典型的连接运算,使用像 = 或 <> ...
- mysql外连接插座_深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接...
1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和 ...
- 数据库-左外连接-右外连接
左外连接 外链接:左外连接.右外连接.全连接.自连接. 左外连接:用左边表去右边表中查询对应记录,不管是否找到,都将显示左边表中全部记录. 即:虽然右表没有香蕉对应的价格,也要把他查询出来. 语法:s ...
- MySQL数据库的内连接,左外连接和右外连接查询
1.首先谈一谈数据库的连接查询有什么作用? 简单的说就是在实际生活中,当我们查询某些数据的时候,一张表不可能为我们提供足够多的数据,其次在数据库的设计的时候,考虑到表的结构和复杂性,会设计多张分类表, ...
- SQL 左外连接,右外连接,全连接,内连
SQL 左外连接,右外连接,全连接,内连接 连接条件可在FROM或WHERE子句中指定,建议在FROM子句中指定连接条件.WHERE和HAVING子句也可以包含搜索条件,以进一步筛选连接条 ...
- 数据库表连接总结:等值连接, 自然连接,左外连接,右外连接,内连接,全外连接;
[1]等值连接 1)连接:凡是查询涉及到两个以上的表,就需要将表连接: 2)就是用where子句做的连接查询:连接查询的列名可以不同: [2]自然连接: select * from a_tbl na ...
- MySQL的自然联结+外部联结(左外连接,右外连接)+内部联结
[0]README 0.1)本文旨在review MySQL的自然联结+外部联结(左外连接,右外连接)+内部联结 的相关知识: [1]自然联结 1)自然联结定义:无论何时对表进行联结,应该至少有一个列 ...
最新文章
- 什么限制了GNN的能力?首篇探究GNN普适性与局限性的论文出炉!
- ACMNO.20 C语言-插入队列 已有一个已排好的9个元素的数组,今输入一个数要求按原来排序的规律将它插入数组中。 输入 第一行,原始数列。 第二行,需要插入的数字。
- Snchronize对象锁同步
- [转]Android 代码混淆和加固 so库 简单教你一行代码实现
- form表单提交,后台实体类接收转义问题 解决方案
- python django flask介绍_django和flask哪个值得研究学习
- oracle字段公式怎么执行,Oracle 在存储过程或函数中执行字符串sql PDF 下载
- CVPR 2019 Oral | 京东目标检测算法ScratchDet的深入思考
- 在Win7系统下, 使用VS2015 打开带有日文注释程序出现乱码的解决方案
- synchronized工作原理剖析(二)
- 一文读懂程序化交易、算法交易、量化交易、高频交易、 统计套利的区别
- 腾讯程序员的职业晋升答辩之【完全解析】
- 计算机视觉的专家和网站
- 传统广域网有什么特点?传统广域网面临哪些挑战?
- 华为热设计工程师待遇_【华为热设计工程师面试】华为热设计工程师大家要慎重考虑。-看准网...
- 在龙芯电脑制作 debian 系统(MIPS)
- php案例:批量重命名图片
- Dalvik虚拟机垃圾收集(GC)过程分析
- 无所不在的JavaScript与物联网设备
- 全志h3通用固件_全志H3固件解包打包方法