HQL多表查询
------------------siwuxie095
HQL 多表查询
以客户和联系人为例(一对多)
1、内连接
(1)hql 语句写法
from Customer c inner join c.linkManSet
(2)具体实现
/* * (1) 创建 Query 对象 * * 调用 session 的 createQuery() 方法,参数是 hql * 语句,返回值是 Query 类型,创建以接收 */ Query query=session.createQuery("from Customer c inner join c.linkManSet"); /* * (2) 调用方法得到结果 * * 调用 query 的 list() 方法,返回值是 List 类型, * 创建以接收 * * 注意:此时返回的 List 的每部分都是一个数组,而 * 不是 Customer 对象或 LinkMan 对象,所以指定泛 * 型为 Object[] */ List<Object[]> list=query.list(); for (Object[] obj : list) { Customer customer=(Customer) obj[0]; LinkMan linkMan=(LinkMan) obj[1]; System.out.println(customer.getCustName()+"-"+linkMan.getLkmName()); } |
(3)返回的 List 中,每部分都是一个数组
2、迫切内连接
(1)迫切内连接 和 内连接 的底层实现(即 sql 语句)都一样
(2)区别:
1)内连接返回的 List 中,每部分都是一个数组
2)迫切内连接返回的 List 中,每部分都是一个对象
(3)hql 语句写法
from Customer c inner join fetch c.linkManSet
(4)具体实现
/* * (1) 创建 Query 对象 * * 调用 session 的 createQuery() 方法,参数是 hql * 语句,返回值是 Query 类型,创建以接收 */ Query query=session.createQuery("from Customer c inner join fetch c.linkManSet"); /* * (2) 调用方法得到结果 * * 调用 query 的 list() 方法,返回值是 List 类型, * 创建以接收 * * 注意:此时返回的 List 的每部分都是一个 Customer * 对象 */ List<Customer> list=query.list(); for (Customer cust : list) { System.out.println(cust.getCustName()+"-"+cust.getLinkManSet().size()); } |
3、左外连接
(1)hql 语句写法
from Customer c left outer join c.linkManSet
(2)左外连接返回的 List 中,每部分都是一个数组
4、迫切左外连接
(1)hql 语句写法
from Customer c left outer join fetch c.linkManSet
(2)迫切左外连接返回的 List 中,每部分都是一个对象
5、右外连接
(1)hql 语句
from Customer c right outer join c.linkManSet
(2)右外连接返回的 List 中,每部分都是一个数组
「注意:没有迫切右外连接」
【made by siwuxie095】
HQL多表查询的更多相关文章
- Hibernate hql 多表查询
String hql="select c from Col c ,UserRole role where c.id=role.columnId and c.id=? and role.use ...
- Hibernate HQL多表查询
1.内连接和迫切内连接 (1)内连接 HQL语句:from 实体类名 实体类别名 inner join 实体类别名.表示另一个表数据的集合名称 (2)迫切内连接 HQL语句:from 实体类名 实体类 ...
- Hibernate的HQL多表查询
HQL的内连接查询 对于HQL内链接查询,查询的是两张表的数据,这两张表的数据首先是保存在数组之中,然后在将每一个数组保存在List集合之中进行返回 代码片段: @Test // 内连接 public ...
- hql 多表查询
sql 单表/多表查询去除重复记录单表distinct多表group by select h from Hytxbz as h,Tgbzk as t where h.hytxbzid=t.hytxbz ...
- Hibernate_day04--HQL多表查询_Hibernate检索策略
HQL多表查询 Mysql里面多表查询 1 内连接 查的是两个表关联的数据 2 左外连接 查的是左边表所有数据,右边表关联数据 3 右外连接 HQL实现多表查询 Hql多表查询 (1)内连接 (2)左 ...
- HQL之多表查询(一对多和多对多)
一.一对多 以班级Classes和学生Student为例: 回忆sql语句: //内链接,两种方式效果一样,查询的是两边都有的数据 SELECT c.*,s.* FROM classes c,st ...
- jpa 联表查询 返回自定义对象 hql语法 原生sql 语法 1.11.9版本
-----业务场景中经常涉及到联查,jpa的hql语法提供了内连接的查询方式(不支持复杂hql,比如left join ,right join). 上代码了 1.我们要联查房屋和房屋用户中间表,通过 ...
- Hibernate中的HQL的基本常用小例子,单表查询与多表查询
<span style="font-size:24px;color:#3366ff;">本文章实现HQL的以下功能:</span> /** * hql语法: ...
- sql多表查询时怎么获取查到的字段
首先,多表查询不能用hql(貌似hql就是不支持多表查询,如果可以,希望看到的朋友给个例子) List list = systemService.findListbySql("SELECT ...
随机推荐
- Python 函数 -globals()
globals() globals() 函数会以字典类型返回当前位置的全部全局变量. 实例: >>>a='runoob' >>> print(globals()) ...
- 在Centos中yum安装和卸载软件的使用方法(转)
在Centos中yum安装和卸载软件的使用方法 安装方法 安装一个软件时 yum -y install httpd 安装多个相类似的软件时 yum -y install httpd* 安装多个非类似软 ...
- php的闭包
闭包是指在创建时封装周围状态的函数,即使闭包所在的环境的不存在了,闭包中封装的状态依然存在. 匿名函数其实就是没有名称的函数,匿名函数可以赋值给变量,还能像其他任何PHP函数对象那样传递.不过匿名函数 ...
- Protobuff java 文件生成命令
protoc.exe -I./proto文件目录 --java_out=java文件目录 proto文件基于文件目录的全路径 protoc.exe -I./protoFolder --java_out ...
- Hibernate学习4—关联关系一对多映射
一.班级学生一对多映射实现(单向) Class 1 * Student 一对多 在学生多的一方,配置一的对象: com.cy.model.Class: package com.cy.model; ...
- python中scipy学习——随机稀疏矩阵及操作
1.生成随机稀疏矩阵: scipy中生成随机稀疏矩阵的函数如下: scipy.sparse.rand(m,n,density,format,dtype,random_state) 1 参数介绍: 参数 ...
- mysql 优化(3)
using filesort 不能利用索引来进行分组或排序,利用filesort算法在内存或者磁盘进行排序using temporary 先在内存中进行分组,归并等操作,不够利用磁盘 SELECT i ...
- Java GC日志查看
Java GC类型 Java中的GC有哪几种类型? 参数 描述 UseSerialGC 虚拟机运行在Client模式的默认值,打开此开关参数后, 使用Serial+Serial Old收集器组合进行垃 ...
- python解析时间格式脚本
对于这种时间格式:發表於: 星期一 五月 28, 2012 6:59 am import re INPUT = "發表於: 星期一 五月 28, 2012 6:59 am 文章主題: 對&l ...
- centos7系统安装python3,pip3,django
首先去python官网下载python3的源码包,网址:https://www.python.org/ 或者直接wget下载 wget https://www.python.org/ftp/pytho ...