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问题.docx

  • 2012年06月05日 12:32
  • 28KB
  • 下载

hibernate中的N+1问题

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

Hibernate 查询1+N问题详解

1、1+N简单来说就是,Person和Phone是一对多关系,现在我看看所有手机的信息,对于其属于哪个人不感兴趣,但把lazy设为false(lazy=false),这样就会发出1(查询手机的sql)...
  • akwolf
  • akwolf
  • 2011年10月11日 10:42
  • 854

hibernate N+1查询问题

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

Hibernate学习_018_1+N问题

preparing...

Hibernate表中的1+N的问题

1、所谓1+N的问题,意思是说我们希望查询一张表里面的数据,但是在执行sql语句时,会发生多条和另外对应表的sql语句。这样会降低数据库执行效率和性能。 2.解决1+N的问题的三种方式如下: /...

hibernate中的1+N问题

Hibernate n+1问题  在Session的缓存中存放的是相互关联的对象图。默认情况下,当Hibernate从数据库中加载Customer对象时,会同时加载所有关联的 Order对象。以Cus...

Hibernate n+1问题

发现这篇文章,讲n+1问题,讲得简洁易懂,故转载之。 n+1问题,貌似大家都懂,但是如何发现,如何避免是关键。 在Session的缓存中存放的是相互关联的对象图。默认情况下,当Hibe...

Hibernate的n+1问题

1、在利用Hibernate操作数据库的时候,如果在实体类上设置了表的双向关联.这可能会出现Hibernate N+1的问题.         1.1、一对多:                   ...

Hibernate 里面的1+N问题

Hibernate之1+N问题 1、 Category类 package com.edu.hpu; import javax.persistence.Entity; import javax...
  • chinrui
  • chinrui
  • 2013年05月08日 19:26
  • 257
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hibernate n+1问题
举报原因:
原因补充:

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