HQL (迫切)左外连接
来源:互联网 发布:java高手的简历 编辑:程序博客网 时间:2024/06/06 09:02
迫切左外连接:
LEFT JOIN FETCH 关键字表示迫切左外连接检索策略.
list() 方法返回的集合中存放实体对象的引用, 每个 Department 对象关联的 Employee 集合都被初始化, 存放所有关联的 Employee 的实体对象.
查询结果中可能会包含重复元素, 可以通过一个 HashSet 或 DISTINCT 关键字 来过滤重复元素
@Test public 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去重
@Test public 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,只有使用的时候才会真正初始化
select distinct grade0_.GRADE_ID as GRADE_ID1_1_, grade0_.NAME as NAME2_1_, grade0_.PERSON_SUM as PERSON_S3_1_ from hibernate.GRADE grade0_ left outer join hibernate.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 (迫切)左外连接
- Hibernate迫切左外连接和迫切内连接
- 内连接,迫切内连接,左外连接,迫切左外连接
- 迫切左外连接、 左外连接、 迫切内连接、 内连接
- 内连接,迫切内连接,左外连接,迫切左外连接
- Hibernate中的迫切左外连接和左外连接
- hibernate中关于迫切左外连接 左连接
- 内连接,外连接,交叉连接,迫切左外连接和迫切内连接
- 关于内连接、左外连接和迫切左外连接
- Hibernate查询-不迫切左连接与迫切的区别
- hibernate_day04_14_HQL多表查询(左外连接和迫切左外连接)
- HQL左外连接及排序
- hql执行左连接~
- HQL的左连接
- Hibernate高级查询方法(内含hibernate迫切左外连接检索策略)
- SQL左外链接右链接迫切左外链接
- hibernate关于hql的左外连接查询
- Hibernate 学习笔记 之 HQL 内连接和迫切内连接
- spark中的map和flattop,persist和cache分别有什么区别?
- 设计模式【观察者模式】
- 数据结构排序算法代码实现
- java反射总结
- 2017-12-21
- HQL (迫切)左外连接
- adobe flash builder flex 4.6 下载地址
- 关于synchronized的几种用法和相关知识。
- windows命令行方式下打印和设置PATH变量
- SecureRandom实现随机盐salt
- Fragment 生命周期的详情
- ROS -Kinetic<在ubuntu16.04上安装rbx1和arbotix模拟器>
- 用java实现的通用内存分页函数
- SQL事务中锁的用法,与结束进程语句的用法