20 Hibernate 1+N问题的原理与解决
来源:互联网 发布:怎样学java软件工程师 编辑:程序博客网 时间:2024/06/05 21:18
什么时候会遇到1+N的问题?
前提:Hibernate默认表与表的关联方法是fetch="select",不是fetch="join",这都是为了懒加载而准备的。
1)一对多(<set><list>) ,在1的这方,通过1条sql查找得到了1个对象,由于关联的存在 ,那么又需要将这个对象关联的集合取出,所以合集数量是n还要发出n条sql,于是本来的1条sql查询变成了1 +n条 。
2)多对一<many-to-one> ,在多的这方,通过1条sql查询得到了n个对象,由于关联的存在,也会将这n个对象对应的1 方的对象取出, 于是本来的1条sql查询变成了1 +n条 。
3)iterator 查询时,一定先去缓存中找(1条sql查集合,只查出ID),在没命中时,会再按ID到库中逐一查找, 产生1+n条SQL
怎么解决1+N 问题?
1 )lazy=true, hibernate3开始已经默认是lazy=true了;lazy=true时不会立刻查询关联对象,只有当需要关联对象(访问其属性,非id字段)时才会发生查询动作。
2)使用二级缓存, 二级缓存的应用将不怕1+N 问题,因为即使第一次查询很慢(未命中),以后查询直接缓存命中也是很快的。刚好又利用了1+N 。
3) 当然你也可以设定fetch="join",一次关联表全查出来,但失去了懒加载的特性。
转载地址:http://elf8848.iteye.com/blog/342691
- 20 Hibernate 1+N问题的原理与解决
- 20 Hibernate 1+N问题的原理与解决
- Hibernate 1+N问题的原理与解决
- Hibernate 1+N问题的原理与解决
- Hibernate 1+N问题的原理与解决
- Hibernate 1+N问题的原理与解决
- hibernate的N+1问题的分析与解决
- 如何解决Hibernate 的N+1问题
- 解决Hibernate中1+n的问题
- Hibernate 解决n+1问题
- Hibernate解决n+1问题
- Hibernate的1+N(N+1)问题与解决方法
- 如何解决Hibernate 的N+1问题 .list to map
- 怎么解决Hibernate的n+1问题文章2
- Hibernate的1+N问题(N+1)
- Hibernate的N+1问题
- Hibernate的n+1问题
- hibernate 的N + 1问题
- Flex元标签
- linux终端
- 外观模式
- UML中定义的关系主要有6种: 依赖、关联、聚合、组合/合成、泛化、实现; 以及对应的C++体现
- NetSuiteERP-助您成功实现企业资源规划
- 20 Hibernate 1+N问题的原理与解决
- VC不会告诉你的8件事
- 商城CMS之OpenCart二次开发详细入门教程
- NetSuite E-commerce 轻松把握电子商务新时代
- Tinyumbrella无法运行的解决办法
- Hibernate的乐观锁与悲观锁及应用
- Oracle10g EM乱码之快速解决
- Tortoises SVN 教程
- Linux screen如何加载用户配置