hibernate中如何防止N+1条语句查询

转载 2013年12月04日 10:11:46



就是在使用hibernate执行查询的时候,如何减少语句的条数,从而提高效率?
2010-07-21 17:37
使用懒加载lazy。lazy是用来控制延迟加载和立即加载的。
hibernate3.0中lazy有三个值,true,false,proxy,默认的是lazy="proxy".
具体设置成什么要看你的需求,并不是说哪个设置就是最好的。
假如在student对象中包含一个head对象
如果你确定在用student对象的时候就要用到head对象里的属性,那你就设置立即加载,因为设置立即加载那么在查询student的同时就会查询student的head,hibernate就会在查询的时候关联两张表从而生成的sql就可能只有一条。而如果你设置的是延迟加载,那么肯定会要生成1+N条sql语句:其中“1”是查询student的语句,“N”是根据1个student的id依次去查询head的N条语句。而且,延迟加载是要用到的时候才去执行查询,这样系统判断那里需要加载,那里不需要加载也需要时间,性能上肯定就不如立即加载了!
如果,你是有的地方需要用到student的时候才用到head属性,那么你就设置成延迟加载,因为查询2张表的数据肯定要比查询1张表的数据消耗大。
到低要怎样设置就要看你的实际需求了。
所以合适的属性颗度划分非常重要。一次加载全部需要的属性,把不需要的属性延时加载。按照业务需求,把属性按需求进行切分,确保一次访问能够得到全部需要的数据,这是最好的

hibernate中如何防止N+1条语句查询

2010-07-21 10:23mengyilove517 | 分类:JAVA相关 | 浏览1220次
就是在使用hibernate执行查询的时候,如何减少语句的条数,从而提高效率?
2010-07-21 17:37提问者采纳
使用懒加载lazy。
lazy是用来控制延迟加载和立即加载的。
hibernate3.0中lazy有三个值,true,false,proxy,默认的是lazy="proxy".
具体设置成什么要看你的需求,并不是说哪个设置就是最好的。
假如在student对象中包含一个head对象
如果你确定在用student对象的时候就要用到head对象里的属性,那你就设置立即加载,因为设置立即加载那么在查询student的同时就会查询student的head,hibernate就会在查询的时候关联两张表从而生成的sql就可能只有一条。而如果你设置的是延迟加载,那么肯定会要生成1+N条sql语句:其中“1”是查询student的语句,“N”是根据1个student的id依次去查询head的N条语句。而且,延迟加载是要用到的时候才去执行查询,这样系统判断那里需要加载,那里不需要加载也需要时间,性能上肯定就不如立即加载了!
如果,你是有的地方需要用到student的时候才用到head属性,那么你就设置成延迟加载,因为查询2张表的数据肯定要比查询1张表的数据消耗大。
到低要怎样设置就要看你的实际需求了。
所以合适的属性颗度划分非常重要。一次加载全部需要的属性,把不需要的属性延时加载。按照业务需求,把属性按需求进行切分,确保一次访问能够得到全部需要的数据,这是最好的

相关文章推荐

Hibernate的N+1条SQL查询问题-------Iterate

hibernate使用session.createQuery(hql)查询数据的时候,有两种查询方式: 1、一种是只查询一次,将所有要查询的数据都查询出来,后面直接取数据就可以了;       获取方...

hibernate级联查询执行n+1次sqlt语句问题(内含解决办法,优化方式)

如果当SQL数据库中select语句数目过多,就会影响数据库的性能,如果需要查询n个Customer对象,那么必须执行n+1次select查询语句,下文就将为您讲解这个n+1次select查询问题。 ...

hibernate manytoone list 查询 发出的语句为什么是 1+N条

1+N问题的描述:举例,多个主题(Topic)属于一个帖子(Category),一个帖子含有多个主题。当只需要查询Topic时不要查询Category时,如果@ManyToOne的属性fetch=Fe...

从Mysql某一表中随机读取n条数据的SQL查询语句

若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1))。例如, 若要在7 到 12...

[MSSQL]语句查询每个分组的前N条记录的实现方法

下文为您介绍的是使用SQL语句查询每个分组的前N条记录的实现方法,如果您在此方面曾经遇到过问题,不妨一看,对您学习SQL语句使用有所帮助。--> 生成测试数据: #T IF OBJECT_ID('t...

hibernate n+1查询

  • 2012-01-27 20:11
  • 372KB
  • 下载

从Mysql某一表中随机读取n条数据的SQL查询语句

从 Mysql 表中随机读取数据不难,方法还挺多的,但是如果要考虑效率,得到一个快速的高效率的方法 随机获得Mysql数据表的一条或多条记录有很多方法,下面我就以users(userId,use...

[MS SQL]SQL语句查询每个分组的前N条记录的实现方法

--> 生成测试数据: #T IF OBJECT_ID('tempdb.dbo.#T') IS NOT NULL DROP TABLE #T CREATE TABLE #T (ID VARCHAR...

Hibernate 查询1+N问题详解

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

hibernate N+1查询问题

在Session的缓存中存放的是相互关联的对象图。默认情况下,当Hibernate从数据库中加载Customer对象时,会同时加载所有关联的Order对象。以Customer和Order类为例,假定O...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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