fetch与lazy
来源:互联网 发布:网络推广师学费多少 编辑:程序博客网 时间:2024/05/19 00:41
Hibernate中fetch和lazy介绍
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"的时候,自己认为这个时候延迟已经没有什么用了,因为采用的是外连接查询,同时把一端和多端都查询出来了,延迟没有起作用。
- fetch与lazy
- lazy fetch
- fetch="select" 与lazy="false"
- 延迟加载fetch, lazy与更新cascade, inverse
- hibernate_关于fetch的lazy与eager的说明
- NHibernate性能调优之Lazy与Fetch
- 浅谈hibernate lazy fetch
- hibernate lazy和fetch
- HIbernate lazy fetch
- inverse lazy fetch
- Hibernate fetch lazy cascade inverse
- fetch lazy 详解(一)
- @ManyToOne(fetch=FetchType.LAZY)
- hibernate的 lazy 和 fetch
- Hibernate fetch lazy cascade inverse 关键字
- 重新学习 Hibernate fetch lazy cascade inverse
- Hibernate fetch lazy cascade inverse 关键字 【转】
- hibernate lazy fetch leading json serializ exception
- JDBC那些事(二)——查询结果集_ResultSet
- 163----三级联动---实际开发中if嵌套过多,很少使用
- 基于dragonboard 410c的智能魔镜设计(9)——UI交互控制逻辑实现
- 欢迎使用CSDN-markdown编辑器
- 四种常见的浏览器内核简介
- fetch与lazy
- VS2013 密钥
- opencv 图片增加水印
- 停止Java线程,小心interrupt()方法
- Java:String和Date、Timestamp之间的转换
- BZOJ2986 Non-Squarefree Numbers
- C#单例启动程序
- -ROOT-表和.META.表详解
- C#Winform进度条的使用