HQL的内连接查询

  对于HQL内链接查询,查询的是两张表的数据,这两张表的数据首先是保存在数组之中,然后在将每一个数组保存在List集合之中进行返回

代码片段:

 @Test
// 内连接
public void fun1() {
SessionFactory factory = null;
Session session = null;
Transaction tx = null;
try {
factory = Tools.getSessionFactory();
session = factory.openSession();
tx = session.beginTransaction();
// mans是Customer实体类的关联LinkMan实体类的一个集合属性
Query query = session.createQuery("from Customer c inner join c.mans");
List list = query.list();
tx.commit();
} catch (Exception e) {
tx.rollback();
e.printStackTrace();
} finally {
session.close();
}
}

debug截图:

HQL迫切内连接查询

  hql的迫切内连接查询,只需要将内连接查询加上一个fetch就行,如下:

 from Customer c inner join fetch c.mans

  迫切内连接和内连接的主要的区别是,内连接的List每部分是一个对象数组,而迫切内连接的List每部分返回的是一个对象。

代码片段:

 @Test
// 迫切内连接
public void fun2() {
SessionFactory factory = null;
Session session = null;
Transaction tx = null;
try {
factory = Tools.getSessionFactory();
session = factory.openSession();
tx = session.beginTransaction();
// mans是Customer实体类的关联LinkMan实体类的一个集合属性
Query query = session.createQuery("from Customer c inner join fetch c.mans");
List list = query.list();
tx.commit();
} catch (Exception e) {
tx.rollback();
e.printStackTrace();
} finally {
session.close();
}
}

Debug截图:

HQL的左外连接

  左外连接的hql语句:

 from Customer c left outer join 关联另一个实体的属性

代码片段:

 @Test
// 左外连接
public void fun3() {
SessionFactory factory = null;
Session session = null;
Transaction tx = null;
try {
factory = Tools.getSessionFactory();
session = factory.openSession();
tx = session.beginTransaction();
Query query = session.createQuery("from Customer c left outer join c.mans");
List list = query.list();
tx.commit();
} catch (Exception e) {
tx.rollback();
e.printStackTrace();
} finally {
session.close();
}
}

Debug截图:

HQL的左外迫切连接

  迫切左外连接hql语句:

from Customer c left outer join fetch 关联的另一个实体类在此类中的属性

代码片段:

 @Test
// 迫切左外连接
public void fun4() {
SessionFactory factory = null;
Session session = null;
Transaction tx = null;
try {
factory = Tools.getSessionFactory();
session = factory.openSession();
tx = session.beginTransaction();
Query query = session.createQuery("from Customer c left outer join fetch c.mans");
List list = query.list();
tx.commit();
} catch (Exception e) {
tx.rollback();
e.printStackTrace();
} finally {
session.close();
}
}

Debug截图:

Hibernate的HQL多表查询的更多相关文章

  1. Hibernate中的多表查询及抓取策略

    1.Hibernate中的多表查询 1.1SQL中的多表查询 [交叉连接] select * from A,B; [内连接] 显示内连接:inner join(inner 可以省略) Select * ...

  2. HQL多表查询

    ------------------siwuxie095 HQL 多表查询 以客户和联系人为例(一对多) 1.内连接 (1)hql 语句写法 from Customer c inner join c. ...

  3. Hibernate hql 多表查询

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

  4. Hibernate HQL多表查询

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

  5. hql 多表查询

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

  6. Hibernate:基于HQL实现数据查询

    HQL:  hibernate query language(hibernate特有的查询语言) hql是基于对象的查询语言,其语法与sql类似,但是他和sql的区别在于sql是面向表和字段的查询,而 ...

  7. Hibernate之HQL添加过滤器查询的用法

    HQL查询过程中支持添加过滤器.使用步骤是这样的: 首先在要查询的实体对象的映射中使用<filter-def>标签配置过滤器,并在相对应的<class>标签中添加对应的< ...

  8. Hibernate学习---单表查询

    我们都知道SQL是非常强大的,为什么这么说呢?相信学过数据库原理的同学们都深有体会,SQL语句变化无穷,好毫不夸张的说可以实现任意符合我们需要的数据库操作,既然前面讲到Hibernate非常强大,所以 ...

  9. Hibernate 笔记 HQL查询 条件查询,聚集函数,子查询,导航查询

    在hibernate中进行多表查询,每个表中各取几个字段,也就是说查询出来的结果集并没有一个实体类与之对应,如何解决这个问题? 解决方案一,按照Object[]数据取出数据,然后自己组bean 解决方 ...

随机推荐

  1. 感想 - 猴子刷视频app

    看到一个视频,内容是一只猿猴熟练地像人一样刷短视频app,惟妙惟肖:https://pan.baidu.com/s/10-eibLmuybKtRJ-CKnruYA 抽象思考和语言才是人类独有的能力,视 ...

  2. mysql 在查字符串字段中 条件参数传为数字0查到与实际数据不匹配问题

    比如: CREATE TABLE `e` ( `id` int(11) DEFAULT NULL, `status` varchar(255) DEFAULT NULL, `b` varchar(25 ...

  3. this 指向图

  4. Python---进阶---捕获异常

    一.编写一个计算减法的方法,当第一个数小于第二个数时,抛出“被减数不能小于减数”的异常 ------------------------------------------------- def ji ...

  5. php----等比缩放图片

    <?php /** * Created by PhpStorm. * User: admin * Date: 2019/11/19 * Time: 8:54 */ $filename = 'lo ...

  6. celery在项目中的使用

    1 关于celery是一个处理异步耗时任务的框架 由 worker 和broker 和store 3部分组成 worker是来处理消息的工人 broker是来存储请求消息的仓库 store是用来存储结 ...

  7. WPF 远程显示原图 当前主页面 工具栏 一个Window页面的元素适用一个效果

    http://www.jb51.net/article/98384.htm 1.wpf远程显示原图: Stretch="Fill" + ; 主要是因为那个950和650,据显示位置 ...

  8. Vue最常用的组件通讯有三种:父->子组件通讯、子->父组件通讯,兄弟组件通讯.(template用的pug模板语法)

    Vue组件通讯   Vue最常用的组件通讯有三种:父->子组件通讯.子->父组件通讯,兄弟组件通讯.(template用的pug模板语法) 1.父->子组件通讯 父->子组件通 ...

  9. Python3 面向对象-类的继承与派生

    1.什么是继承? 继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类可称为基类或超类,新建的类称为派生类和或子类. 子类会遗传父类的属性,从而解决代码重用问题. ...

  10. 使用distinct消除重复记录的同时又能选取多个字段值

    需求是:我要消除name字段值重复的记录,同时又要得到id字段的值,其中id是自增字段. select distinct name from t1 能消除重复记录,但只能取一个字段,现在要同时取id, ...