Hibernate中的fetch和lazy介绍
来源:互联网 发布:王者引擎全套源码 编辑:程序博客网 时间:2024/06/13 23:20
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"的时候,自己认为这个时候延迟已经没有什么用了,因为采用的是外连接查询,同时把一端和多端都查询出来了,延迟没有起作用。
- Hibernate中的fetch和lazy介绍
- Hibernate中fetch和lazy介绍
- Hibernate中fetch和lazy介绍
- Hibernate中fetch和lazy介绍
- Hibernate中的fetch, lazy, inverse和cascade
- hibernate lazy和fetch
- hibernate的 lazy 和 fetch
- [hibernate] 配置文件中的 lazy, inverse, cascade 和 fetch
- [hibernate] 配置文件中的 lazy, inverse, cascade 和 fetch
- [hibernate] 配置文件中的 lazy, inverse, cascade 和 fetch
- Hibernate中的fetch, lazy, outer-join,inverse和cascade作用
- hibernate的 lazy 和 fetch 如何配置
- hibernate的抓取策略(fetch和lazy)
- hibernate的 lazy 和 fetch 一般配置
- 浅谈hibernate lazy fetch
- HIbernate lazy fetch
- hibernate关联关系中的一对一以及懒加载的原理:lazy和fetch的理解
- Hibernate的关联关系中lazy和fetch的设置
- js表格隔行变色
- poj_3321 Apple Tree(dfs序+树状数组)
- 80老翁谈人生(351):北大违纪派存在的客观基础
- 图片加载三方库ImageLoader,Fresco,Picasso,Glide
- android studio快捷键
- Hibernate中的fetch和lazy介绍
- 关于DataBinding生成的类找不到的问题
- 小“Siri” 开发
- 使用Handler延迟简单实现欢迎页面的跳转
- 常用Debug模式下的打印DLog
- RabbitMQ消息队列(一): Detailed Introduction 详细介绍
- Hibernate 的HQL和sql有什么区别
- 微信小程序服务器配置https站点
- 【.net 深呼吸】限制执行代码的权限