------------------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多表查询的更多相关文章

  1. Hibernate hql 多表查询

    String hql="select c from Col c ,UserRole role where c.id=role.columnId and c.id=? and role.use ...

  2. Hibernate HQL多表查询

    1.内连接和迫切内连接 (1)内连接 HQL语句:from 实体类名 实体类别名 inner join 实体类别名.表示另一个表数据的集合名称 (2)迫切内连接 HQL语句:from 实体类名 实体类 ...

  3. Hibernate的HQL多表查询

    HQL的内连接查询 对于HQL内链接查询,查询的是两张表的数据,这两张表的数据首先是保存在数组之中,然后在将每一个数组保存在List集合之中进行返回 代码片段: @Test // 内连接 public ...

  4. hql 多表查询

    sql 单表/多表查询去除重复记录单表distinct多表group by select h from Hytxbz as h,Tgbzk as t where h.hytxbzid=t.hytxbz ...

  5. Hibernate_day04--HQL多表查询_Hibernate检索策略

    HQL多表查询 Mysql里面多表查询 1 内连接 查的是两个表关联的数据 2 左外连接 查的是左边表所有数据,右边表关联数据 3 右外连接 HQL实现多表查询 Hql多表查询 (1)内连接 (2)左 ...

  6. HQL之多表查询(一对多和多对多)

    一.一对多 以班级Classes和学生Student为例:   回忆sql语句: //内链接,两种方式效果一样,查询的是两边都有的数据 SELECT c.*,s.* FROM classes c,st ...

  7. jpa 联表查询 返回自定义对象 hql语法 原生sql 语法 1.11.9版本

    -----业务场景中经常涉及到联查,jpa的hql语法提供了内连接的查询方式(不支持复杂hql,比如left join ,right join).  上代码了 1.我们要联查房屋和房屋用户中间表,通过 ...

  8. Hibernate中的HQL的基本常用小例子,单表查询与多表查询

    <span style="font-size:24px;color:#3366ff;">本文章实现HQL的以下功能:</span> /** * hql语法: ...

  9. sql多表查询时怎么获取查到的字段

    首先,多表查询不能用hql(貌似hql就是不支持多表查询,如果可以,希望看到的朋友给个例子) List list = systemService.findListbySql("SELECT ...

随机推荐

  1. Bootstrap组件福利篇:十二款好用的组件推荐

    阅读目录 一.时间组件 1.效果展示 2.源码说明 3.代码示例 二.自增器组件 1.效果展示 2.源码说明 3.代码示例 三.加载效果 一.实用型 二.炫酷型 四.流程图小插件 1.效果展示 2.源 ...

  2. Docker生态会重蹈Hadoop的覆辙吗?

    从网上找到了这篇2016年中旬刷爆朋友圈的文章,没有找到作者和首发出处.两年多过去了,文中分析的很多不确定性都有了结论,里面不少分析思路.观点还是很不错的. Docker的兴起和Hadoop何其相似 ...

  3. php查询mysql数据库 查询条件替中文字符串变量时无法查询

    $temp2 ='十年';mysql_query("SET NAMES GBK"); $res = mysql_query("select songer_name fro ...

  4. 军哥LNMP优化

    http://bbs.vpser.net/thread-8914-1-1.html http://www.zxsdw.com/index.php/archives/881/ 修改/usr/local/ ...

  5. jeecg中选择的数据字典

    <t:dictSelect field="fjingji" hasLabel="false" typeGroupCode="fjingji&qu ...

  6. C# datatable竖行转换的问题

    这次在做项目中,遇到了这样一个问题:datable中列头的名字是不确定的,从数据库中动态查出来的,假设为typeDATA,行的数据中又包含了列头的信息,并按固定的字段分组,当查处行的数据之后用来填充每 ...

  7. Cousera 无法播放视频 解决办法 widows 和 linux

    查资料得知,Cousera无法播放课程视频原因在于DNS污染. 尽管通过FQ软件把视频看完了,在最后一课找到了这个解决办法,现在拿出来分享给大家: Windows: 请参照以下链接: http://j ...

  8. STS - 配置Tomcat 运行路径

    背景 今天在一台新机器上面安装开发环境,下载完code以后在STS上配置Tomcat,发现启动以后无法读取到配置文件...启动失败! 七月 , :: 上午 org.apache.catalina.co ...

  9. hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

    1.接入U盘,看输出打印信息并分析 (1)输出信息 自动创建设备节点 (2)用ls命令查看 这里/dev/sda表示整个U盘,/dev/sda1表示这个U盘的第一个分区. (3)手动挂载,查看文件,手 ...

  10. 浅谈PHP面向对象编程(一、简介)

    传统的面向过程 将要完成的工作,分作若干个步骤,或再细分为子步骤,然后后步骤从前往后一步一步完成,最初达致目标. 现代的面向对象 将要完成的工作拆分为“一个一个对象”的任务(功能),每个对象独自完成自 ...