ҳ ʫ ֵ Ѵ ־ ѧУ վͼ
ǰλ: ҳ > ̳Ƶ > > ܹ >

如何解决Hibernate 的N+һ问题

2013-04-20 
如何解决Hibernate 的N+1问题?span style问题?/span?时?会遇到N+1的问题??/

如何解决Hibernate 的N+1问题

?span style="">问题?/span>?时?会遇到N+1的问题?

?/span>备注?/span> Hibernate默认抓取{略是fetch="select"Q不是fetch="join",这都是ؓ了g迟加载?准夓的?

?/span>出现情况?/span>
         1Q一对E(one-to-many) Q在1的这方,通过1条sql查找得到?个对象,׃兌的存?Q那么又?这个对象关联的集合取出Q所以合集数量是n还覠发出n条sqlQ于是本来的1条sql查询变成了?  1 +n??/span>

         2QE对一<many-to-one>  Q在多的这方Q??条sql查询得到了n个对象,׃兌的存?也会这n个对象对应的1 方的对象取出Q?于是本来?条sql查询变成? +n??/span>

 

         3Qiterator 查询??先去~存中找Q?条sql查集?只查出IDQ,在没命中Ӟ会再按ID雺中??找, 产生1+n条SQL?/span>

 

?/span>解决办法?/span>

          1Qlazy=trueQ?hibernate3?已经默认是lazy=true了;lazy=true时不会立L询关联对象,只有当需要关联对象(讉K其属性,非id字段Q时才会发生查询动作?/span>

 

          2Q用二U缓存, 二~存的应用将不?1+N 问题Q因为即使第?查询很慢Q未命中Q,以后查询直接~存命中也是很快的?刚好又利用了1+N ?/span>

 

          3 ) 当然你也可以讑֮fetch="join"Q一ơ关联表全查出来Q但失去了g迟加载的Ҏ??/span>

 

ȵ