本文共 876 字,大约阅读时间需要 2 分钟。
在学习过程中,经常会挺老师n+1问题,但一直对n+1迷迷糊糊的,在英语学习中,n+1是很重要的,这可以让我们的英语越来越好,但是在hibernate中,如果遇到了n+1问题,那真的会影响性能的。
1 )1 对多,在1 方,查找得到了n 个对象, 那么又需要将n 个对象关联的集合取出,于是本来的一条sql查询变成了n +1 条 2)多对1 ,在多方,查询得到了m个对象,那么也会将m个对象对应的1 方的对象取出, 也变成了m+1
fetch="select" 就是另外发送一条 select 语句抓取当前对象关联实体或者集合设置 fetch="join"
Hibernate 会通过 select 语句使用外连接来加载器关联实体活集合此时 lazy 会失效 b、集合代理的抓取策略 : 保持默认( fetch="select" )也就是如下 :
1)fetch="select" 会另外发出一条语句查询集合 2) 设置 fetch="join" 采用外连接集合的 lazy 失效 3) 这只 fetch="subselect" 另外发出一条 select 语句抓取前面查询到的所有的实体对象的关联集合 fetch 只对 HQL 查询产生影响其他的则不会
转载地址:http://gyica.baihongyu.com/