hibernate n+1问题

原创 2013年12月04日 10:51:52

1+N问题也可以叫N+1问题,什么是1+N问题呢?

如果在一个对象里关联另一个对象,并且fetch = FetchType.EAGER。
比如说ManyToOne(OneToMany也存在这种问题)关联,本来只需要取Many里的对象属性,可是Many里关联的对象都会单独再发一条语句取关联对象的属性。
本来只用发一条就可以查出Many里的对象属性,可是它发了一条语句后,再发N条语句取关联对象的数据。

解决办法:
1、fetch = FetchType.LAZY:在合适的时候才发出语句(按需要发语句)。
2、BatchSize:在One对象设置Size后,取出Many里的数据后,再发N/Size条语句取关联对象的数据,从而达到少发语句的目的。
3、Join Fetch:将Many与One做外连接,因此只要发一条语句就可以查出Many与其相关联的One对象数据,Criteria默认就是这种做法。如何选择解决办法:
如果只要用Many里的对象,不用关联对象的属性,那就用方法1解决;
如果要Many里的对象属性,也想要关联的对象属性就用方法3解决。
版权声明:本文为博主原创文章,未经博主允许不得转载。

Hibernate的n+1问题和基本映射总结

去了一家公司当实习生,结果一进去这两个星期都在让我学习,感觉跟呆学校一样,也是听听课,自己看看书,敲敲代码,不懂问问我们的负责人。拿钱学习也挺好,虽然没做项目总是学习挺乏味的。 最近把hibernat...
  • z55887
  • z55887
  • 2015年09月23日 21:50
  • 792

Hibernate的N+1查询及解决

在Session的缓存中存放的是相互关联的对象图。默认情况下,当hibernate从数据库中加载Customer对象时,会同时加载所有关联的Order对象。以Customer和Order类为例,假定O...
  • ILOVESMJ
  • ILOVESMJ
  • 2016年06月08日 19:12
  • 5376

Hibernate 一级缓存 二级缓存 1+N问题 查询缓存

在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session级别)、二级缓存(sessionFactory级别)以及查询缓存,当然还要讨论下我们的N+1的问题。 随笔虽长,...
  • sh_c1991
  • sh_c1991
  • 2016年09月09日 11:50
  • 649

hibernate中的N+1问题

什么时候会遇到1+N的问题?  前提:Hibernate默认表与表的关联方法是fetch="select",不是fetch="join",这都是为了懒加载而准备的。    1)一对多() ...
  • vivian5350
  • vivian5350
  • 2014年12月22日 21:37
  • 2948

hibernate的N+1问题解析

在Session的缓存中存放的是相互关联的对象图。默认情况下,当Hibernate从数据库中加载Customer对象时,会同时加载所有关联的Order对象。以Customer和Order类为例,假定O...
  • bestone0213
  • bestone0213
  • 2015年10月08日 16:08
  • 274

Hibernate N+1问题及解决办法

Hibernate N+1 问题及解决办法 问题出现的原因: Hibernate 中常会用到 set , bag 等集合表示 1 对多的关系,在获取实体的时候就能根据关系将关联的对象或者对象集取出...
  • working_brain
  • working_brain
  • 2014年05月19日 14:37
  • 1557

Hibernate中1+N问题以及解决方法

1. Hibernate中的1+N问题描述           在多对一关系中,当我们需要查询多的一方对应的表的记录时,可以用一条sql语句就能完成操作。然而,在多的一方的实体类中的@Many...
  • eson_15
  • eson_15
  • 2016年05月05日 13:38
  • 4791

Hibernate框架---- N+1是什么?它们的list和iterator区别(九)

之前我们说过hibernate的缓存机制,可以将它看成一个Map,通过key在缓存里面找value。 hibernate通过query查询放查询数据,比如我们要查询100条数据,但是其中40条已经缓...
  • sinat_15274667
  • sinat_15274667
  • 2016年12月28日 11:43
  • 433

数据库查询n+1问题

简介在orm框架中,比如hibernate和mybatis都可以设置关联对象,比如user对象关联dept 假如查询出n个user,那么需要做n次查询dept,查询user是一次select,查询u...
  • wangjun5159
  • wangjun5159
  • 2016年08月31日 22:09
  • 2334

SQL中的n+1次select语句查询问题

如果当SQL数据库中select语句数目过多,就会影响数据库的性能,如果需要查询n个Customer对象,那么必须执行n+1次select查询语句,下文就将为您讲解这个n+1次select查询问题。 ...
  • z69183787
  • z69183787
  • 2015年05月31日 15:15
  • 5254
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hibernate n+1问题
举报原因:
原因补充:

(最多只允许输入30个字)