Hibernate N+1问题
2014-09-27 19:09
197 查看
在Hibernate中的对象关联关系,在N对一中会出现N+1问题。
1 )1 对多,在1 方,查找得到了n 个对象, 那么又需要将n 个对象关联的集合取出,于是本来的一条sql查询变成n +1 条
2)多对1 ,在多方,查询得到了m个对象,那么也会将m个对象对应的1 方的对象取出, 也变成了m+1
1 )lazy=true, hibernate3开始已经默认是lazy=true了;lazy=true时不会立刻查询关联对象,只有当需要关联对象(访问其属性,非id字段)时才会发生查询动作。
2)使用二级缓存, 二级缓存的应用将不怕1+N 问题,因为即使第一次查询很慢(未命中),以后查询直接缓存命中也是很快的。刚好又利用了1+N 。
2)使用二级缓存, 二级缓存的应用将不怕1+N 问题,因为即使第一次查询很慢(未命中),以后查询直接缓存命中也是很快的。刚好又利用了1+N 。
3)使用HQL的LEFT OUTER JOIN.
或者在条件查询中使用setFetchMode(FetchMode.JOIN)
4)当然你也可以设定fetch="join",一次关联表全查出来
1 )1 对多,在1 方,查找得到了n 个对象, 那么又需要将n 个对象关联的集合取出,于是本来的一条sql查询变成n +1 条
2)多对1 ,在多方,查询得到了m个对象,那么也会将m个对象对应的1 方的对象取出, 也变成了m+1
1 )lazy=true, hibernate3开始已经默认是lazy=true了;lazy=true时不会立刻查询关联对象,只有当需要关联对象(访问其属性,非id字段)时才会发生查询动作。
2)使用二级缓存, 二级缓存的应用将不怕1+N 问题,因为即使第一次查询很慢(未命中),以后查询直接缓存命中也是很快的。刚好又利用了1+N 。
2)使用二级缓存, 二级缓存的应用将不怕1+N 问题,因为即使第一次查询很慢(未命中),以后查询直接缓存命中也是很快的。刚好又利用了1+N 。
3)使用HQL的LEFT OUTER JOIN.
或者在条件查询中使用setFetchMode(FetchMode.JOIN)
4)当然你也可以设定fetch="join",一次关联表全查出来
相关文章推荐
- HIBERNATE的N+1查询问题
- 转:hibernate中的N+1问题
- hibernate中N+1问题解决办法
- hibernate 查询极慢,最后查出是N+1问题
- Hibernate的1+N问题(N+1)
- Hibernate学习笔记-----n+1问题
- hibernate的N+1问题汇总 和hibernate的缓存机制
- hibernate的持久化对象的状态,n+1问题和load和get方法区别
- Hibernate N+1 问题
- 深入剖析hibernate的N+1问题和缓存问题
- hibernate的N+1问题的分析与解决
- Hibernate N+1 问题
- hibernate N+1问题
- hibernate中的N+1问题
- N+1 查询问题(hibernate)
- hibernate之优化抓取(优化指导方针---n+1查询问题)
- HIBERNATE的N+1查询问题
- Hibernate N+1 问题
- Hibernate 解决n+1问题
- HIBERNATE的N+1查询问题