from Paper as paper join fetch paper.authors as authors where authors.id='xxxx';

from Paper as paper join fetch paper.authors where paper.authors.id='xxxx';

这两个语句有什么区别呢?通过最终生成的sql发现。

上面HQL生成最终sql(部分) from s_paper paper inner join s_paper_author author where author.paper_id=paper.id where author.id='xxx'

下面HQL生成最终sql(部分) from s_paper paper inner join s_paper_author author where author.paper_id=paper.id,s_paper_author author1 where author1.paper_id=paper.id and author1.id='xxx'

可以看出来,下面的多了一个关联。那么问题来了,这两个有什么区别呢?

通过测试发现,第一个sql最终查询的结果,如果论文作者有多个,加上子表的查询条件后,最终封装到实体类里面的却只有符合条件的一个子类(论文作者),但是少了一个关联查询,可以节省部分性能。

第二个sql最终查询的结果,是无论有多少个作者,全部都封装进来了。但是因为多关联了一次表查询,有部分性能损失。

综上,可以根据具体的场景来选择合适的关联方式。

HQL语句中的join fetch的更多相关文章

  1. SQL点滴2—重温sql语句中的join操作

    原文:SQL点滴2-重温sql语句中的join操作 1.join语句 Sql join语句用来合并两个或多个表中的记录.ANSI标准SQL语句中有四种JOIN:INNER,OUTER,LEFTER,R ...

  2. SQL语句中 INNER JOIN的用法!

    一.SQL语句中  INNER JOIN的用法? 1.INNER JOIN的作用? 可以在两个或者更多的表中获取结果,得出一张新表. [隐式内连接] 表一 car  购物车 表二 user 用户 发现 ...

  3. Hibernate的HQL语句中定位参数和具名参数传参

    HQL查询: 1.有关hql查询语句中的问号参数形式,如果出现有多个问号,这对后面设置参数就比较麻烦. 如:from User user where user.name=? and user.age= ...

  4. ql语句中left join和inner join中的on与where的区别分析

    sql语句中left join和inner join中的on与where的区别分析   关于SQL SERVER的表联接查询INNER JOIN .LEFT JOIN和RIGHT JOIN,经常会用到 ...

  5. sql语句中left join、right join 以及inner join之间的使用与区别

    sql语句中left join.right join 以及innerjoin之间的使用与区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录  right join( ...

  6. HQL语句中数据类型转换,及hibernate中createQuery执行hql报错

    一.HQL语句中数据类型转换: 我们需要从数据库中取出序号最大的记录,想到的方法就是使用order by子句进行排序(desc倒序),然后取出第一个对象,可是当初设计数据库时(我们是在原来的数据库的基 ...

  7. sql语句中left join、inner join中的on与where的区别

    table a(id, type): id     type ---------------------------------- 1      1 2      1 3      2 table b ...

  8. sql语句中left join、 inner join的使用

    转自:http://blog.csdn.net/winter3125/article/details/5032871 table a(id, type): id    type ----------- ...

  9. 重温sql语句中的join操作

    1.join语句 Sql join语句用来合并两个或多个表中的记录.ANSI标准SQL语句中有四种JOIN:INNER,OUTER,LEFTER,RIGHT,一个表或视图也可以可以和它自身做JOIN操 ...

随机推荐

  1. 使用 EntityFramework后把一个对象序列化成json字符串引起循环引用的问题

    先看一个T4模板生成的model实体类 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:卷猫 链接:http://anneke.cn/ArticleInfo/Detial ...

  2. LAMP 1.6 Discuz打开错误

    打开discuz失败, ps aux |grep mysql ps aux |grep httpd 查看mysql apache有没有打开. 重启mysql service mysqld restar ...

  3. Python 图像识别入门篇

    一.安装Python依赖 pip install pytesseract pyocr pillow Image pip安装:https://www.cnblogs.com/Javame/p/10918 ...

  4. NumberFormatException: For input string: "null"

    日志: [INFO-2016/08/04/16/:21/:25]ProjectCommonFormController.(78) - 审批[同意]入参-[string]commonFormDtoStr ...

  5. C++之Stack模板类

    假设有这样一种情况:某人将一车文件交给小王.倘若小王的抽屉是空的,那么小王从车上取出最上面的文件将其放入抽屉:倘若抽屉是满的,小王从抽屉中取出最上面的文件,放入垃圾篓:倘若抽屉即不空也未满,那么小王抛 ...

  6. JDBC编程之数据更新

    -------------------siwuxie095                             JDBC 编程之数据更新             首先下载 MySQL 的 JDBC ...

  7. vue 上传二进制图片

    1.前段代码 <el-form-item label="证件照片" prop="idImage"> <input @change='ss' t ...

  8. Hadoop的namenode和secondnamenode分开部署在不同服务器

    一.系统环境:  Hadoop 0.20.2.JDK 1.6.Linux操作系统 二.使用背景  网上关于Hadoop的集群配置,很多情况下,都是把namenode和secondnamenode部署在 ...

  9. ubuntu判断系统是32位还是64位

    1. 打开终端. 2. 输入命令  sudo uname -m 3. 如果输出为 x86_64, 则说明是64位操作系统:如果输出为 i686,说明是32位操作系统.

  10. storm源码分析之topology提交过程

    storm集群上运行的是一个个topology,一个topology是spouts和bolts组成的图.当我们开发完topology程序后将其打成jar包,然后在shell中执行storm jar x ...