fetch ,指定关联对象抓取的方式,可以设置fetch = "select" 和 fetch = "join"。select方式时先查询返回要查询的主体对象(列表),再根据关联外键id,每一个对象发一个select查询,获取关联的对象,形成n+1次查询;而join方式,主体对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询。

在映射文档中定义的抓取策略将会有产生以下影响:

(1)通过get()或load()方法取得数据。

(2)只有在关联之间进行导航时,才会隐式的取得数据(延迟抓取)。

(3)在映射文档中显式的声明连接抓取做为抓取策略并不会影响到随后的HQL查询。

  通常情况下,我们并不使用映射文档进行抓取策略的定制。更多的是,保持其默认值,然后在特定的事务中, 使用HQL的左连接抓取(left join fetch) 对其进行重载。这将通知 Hibernate在第一次查询中使用外部关联(outer join),直接得到其关联数据。 在条件查询 API中,应该调用 setFetchMode(FetchMode.JOIN)语句。

用一对多来举例:

fetch = "select"是在查询的时候先查询出一端的实体,然后在根据一端的查询出多端的实体,会产生1+n条sql语句;

fetch = "join"是在查询的时候使用外连接进行查询,不会差生1+n的现象。

lazy大家应该都熟悉了,就是延迟加载,可以设置lazy = "true" , lazy = "false" lazy = "proxy" 。

  在hql查询中配置文件中设置的join方式是不起作用的(而在所有其他查询方式如get、criteria或再关联获取等等都是有效的),会使用select方式,除非你在hql中指定join fetch某个关联对象。

lazy 和fetch配合使用:

1、当lazy="true" fetch = "select" 的时候 , 这个时候是使用了延迟策略,开始只查询出一端实体,多端的不会查询,只有当用到的时候才会发出sql语句去查询 ;

2、当lazy="false" fetch = "select" 的时候 , 这个时候是使没有用延迟策略,同时查询出一端和多端,同时产生1+n条sql.

3、当lazy="true"/lazy="false" fetch = "join"的时候,自己认为这个时候延迟已经没有什么用了,因为采用的是外连接查询,同时把一端和多端都查询出来了,延迟没有起作用。

 

最新文章

  1. ytu 1057: 输入两个整数,求他们相除的余数(带参的宏 + 模板函数 练习)
  2. greendao操作数据库的使用方法
  3. CodeBlock 使用TextOut出错
  4. (转)iOS应用架构谈 view层的组织和调用方案
  5. Python - 装饰器使用过程中的误区
  6. H - Pots
  7. [个人原创]关于java中对象排序的一些探讨(二)
  8. Inno Setup打包的程序提升为管理员权限
  9. js中跳转
  10. php传输大数据大文件时候php.ini相关设置
  11. Yii2自带的验证码背景颜色怎么调?
  12. Linux修改网卡名称的方法
  13. Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 1)C. Morse Code
  14. mac OS X下Java项目环境搭建+IntelliJ IDEA Jrebel插件安装与破解+Office 2016破解版安装
  15. 海思HI3518由于sensor对齐方式问题导致视频花屏
  16. c++学习笔记——个单词转换的map程序详解
  17. SPSS学习系列之SPSS Text Analytics是什么?
  18. NO.7:自学python之路------类的方法、异常处理、socket网络编程
  19. PAT L1-017 到底有多二
  20. MysQL使用一与Python交互

热门文章

  1. Objective-C写出Json文件(可作配置文件)
  2. 【Centos】修改系统字符集
  3. 34、锁问题与线程queue
  4. ASP.NET Core 防止跨站请求伪造(XSRF/CSRF)攻击
  5. Java 的概述
  6. 聊一聊Redis的数据结构
  7. Html5笔记之第四天
  8. websphere:rs.getDate()无法使用的解决方法
  9. POI实现excel各种验证和导入的思路总结
  10. 基于NIOS-II的示波器:PART3 初步功能实现