迫切左外连接:

  • 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());}} 

区别

  1. 两个查询方式所发送的sql语句是相同的,如下所示。
  2. 迫切连接的 fetch 关键字是告诉hibernate框架,将student的引用也直接初始化。
  3. 而且,迫切连接返回的是一个对象。但普通左外连接,就只是一个数组,需要加上select distinct 关键字后才能打包成对象。
  4. 普通左外连接没有初始化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 (迫切)左外连接相关推荐

  1. Hibernate5-一对多双向关联-迫切左外连接-HQL

    1.创建项目,项目名称hibernatedemo19,目录结构如图所示 2.在项目中创建lib目录存储jar文件,目录结构如图所示 3.在src目录中创建实体Bean Forum,包名(com.myc ...

  2. MySQL 学习笔记(15)— 连接查询(内连接、左外连接、右外连接、全外连接、交叉连接、自然连接等)

    本文参考:https://gitbook.cn/gitchat/column/undefined/topic/5db92b68a9c3a53bc3800eff SQL 支持的连接查询包括内连接.外连接 ...

  3. Oracle 左外连接的一些測试

    为了更加深入左外连接,我们做一些測试,外连接的写法有几种形式,我们能够通过10053跟踪到终于SQL转换的形式. --初始化数据 create table A (   id number,   age ...

  4. SQL 四种连接:内连接、左外连接、右外连接、全连接--转载

    原文:http://zwdsmileface.iteye.com/blog/2191730 个人理解  内连接(INNER JOIN)(典型的连接运算,使用像   =   或   <>   ...

  5. mysql外连接插座_深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接...

    1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和 ...

  6. 数据库-左外连接-右外连接

    左外连接 外链接:左外连接.右外连接.全连接.自连接. 左外连接:用左边表去右边表中查询对应记录,不管是否找到,都将显示左边表中全部记录. 即:虽然右表没有香蕉对应的价格,也要把他查询出来. 语法:s ...

  7. MySQL数据库的内连接,左外连接和右外连接查询

    1.首先谈一谈数据库的连接查询有什么作用? 简单的说就是在实际生活中,当我们查询某些数据的时候,一张表不可能为我们提供足够多的数据,其次在数据库的设计的时候,考虑到表的结构和复杂性,会设计多张分类表, ...

  8. SQL 左外连接,右外连接,全连接,内连

    SQL 左外连接,右外连接,全连接,内连接       连接条件可在FROM或WHERE子句中指定,建议在FROM子句中指定连接条件.WHERE和HAVING子句也可以包含搜索条件,以进一步筛选连接条 ...

  9. 数据库表连接总结:等值连接, 自然连接,左外连接,右外连接,内连接,全外连接;

    [1]等值连接 1)连接:凡是查询涉及到两个以上的表,就需要将表连接: 2)就是用where子句做的连接查询:连接查询的列名可以不同: [2]自然连接: select * from  a_tbl na ...

  10. MySQL的自然联结+外部联结(左外连接,右外连接)+内部联结

    [0]README 0.1)本文旨在review MySQL的自然联结+外部联结(左外连接,右外连接)+内部联结 的相关知识: [1]自然联结 1)自然联结定义:无论何时对表进行联结,应该至少有一个列 ...

最新文章

  1. 什么限制了GNN的能力?首篇探究GNN普适性与局限性的论文出炉!
  2. ACMNO.20 C语言-插入队列 已有一个已排好的9个元素的数组,今输入一个数要求按原来排序的规律将它插入数组中。 输入 第一行,原始数列。 第二行,需要插入的数字。
  3. Snchronize对象锁同步
  4. [转]Android 代码混淆和加固 so库 简单教你一行代码实现
  5. form表单提交,后台实体类接收转义问题 解决方案
  6. python django flask介绍_django和flask哪个值得研究学习
  7. oracle字段公式怎么执行,Oracle 在存储过程或函数中执行字符串sql PDF 下载
  8. CVPR 2019 Oral | 京东目标检测算法ScratchDet的深入思考
  9. 在Win7系统下, 使用VS2015 打开带有日文注释程序出现乱码的解决方案
  10. synchronized工作原理剖析(二)
  11. 一文读懂程序化交易、算法交易、量化交易、高频交易、 统计套利的区别
  12. 腾讯程序员的职业晋升答辩之【完全解析】
  13. 计算机视觉的专家和网站
  14. 传统广域网有什么特点?传统广域网面临哪些挑战?
  15. 华为热设计工程师待遇_【华为热设计工程师面试】华为热设计工程师大家要慎重考虑。-看准网...
  16. 在龙芯电脑制作 debian 系统(MIPS)
  17. php案例:批量重命名图片
  18. Dalvik虚拟机垃圾收集(GC)过程分析
  19. 无所不在的JavaScript与物联网设备
  20. 全志h3通用固件_全志H3固件解包打包方法

热门文章

  1. Linux的EXPORT_SYMBOL和EXPORT_SYMBOL_GPL的使用和区别
  2. 再议Python协程——从yield到asyncio
  3. AngularJS Documents 官方英文文档
  4. Winform控件学习笔记【第四天】——WebBrowser
  5. C#中virtual与abstract的区别
  6. web安全day18:kali下的两个实验彻底理解中间人攻击
  7. 游戏筑基之游戏菜单制作(C语言)
  8. 【愣锤笔记】能解决80%场景的Git必会知识点
  9. 聊聊flink的Table Formats
  10. oozie 调度pyspark