- 浏览: 269825 次
- 性别:
- 来自: 新乡
文章分类
- 全部博客 (227)
- servciemix (10)
- db (18)
- javaTools (4)
- hibernate (31)
- web (3)
- spring (14)
- design pattern (4)
- java security (3)
- portal (1)
- ejb (6)
- session (2)
- java_lang (21)
- jbpm (29)
- struts (7)
- orgRights (2)
- project manager Jira (7)
- 跨库事务 (2)
- mysql (14)
- ubuntu (7)
- osgi (9)
- maven ant make (4)
- 分布式 高并发 高性能 (5)
- virgo-dm_server (0)
- osgi web (3)
- platform (1)
- smooks (1)
- business (1)
- 职场生涯 (14)
- Java编码格式 (2)
- web服务 (1)
- 计算机使用 (1)
- 健康工作生活的保障,工作中务必抛掉的不良心态 (4)
- 电信-网络监控 (1)
- 多线程-multithread (1)
- 海量数据-高性能 (2)
- Mybatis (1)
- web开发平台研发 (0)
- oracle (0)
- 应用服务器调优 (0)
- web前端 (0)
- servlet-jsp (0)
- tomcat (2)
- newtouch (1)
- portal_liferay (2)
- version control (1)
- apm-impact (2)
- tools (1)
- 研发管理 (1)
- 电商业务 (1)
- 生鲜电商市场调查 (0)
- PBX (0)
- 房东 (0)
最新评论
-
lifuchao:
...
权限问题 -
Branding:
谢谢,受教了,另外,CONN AS SYSDBA,必须是在操作 ...
Oracle密码忘记了怎么办? -
zhuchao_ko:
...
Portal实现原理 -
败类斯文:
不知道改哪里。。。木有见到红色。。表示悟性低了、、
jira error: Neither the JAVA_HOME nor the JRE_HOME environment variable is defin -
c__06:
正文:假如事务我是这样定义的: <tx:method n ...
Spring中Transactional配置
*
概括潜在的Hibernate性能问题
* http://developer.51cto.com 2009-09-24 13:45 佚名 IT168 我要评论(0)
这里介绍对于查询结果比较多的情况无疑是一个Hibernate性能上的潜在威胁。碰到这样的情况,将Many的查询进行分开也是一种解决办法。
学习Hibernate时,经常会遇到Hibernate性能问题,这里将介绍Hibernate性能问题的解决方法。
在使用Hibernate进行分页的过程中,如果你收到如下警告,那么这里就是一个潜在的Hibernate性能问题点:
WARNING: firstResult/maxResults specified with collection fetch; applying in memory!
出现这个警告的直接后果是:无论你想要看第几页的数据,从Hibernate打印出的SQL来看它总是查询了所有满足条件的结果。这是为什么呢?来看看这句警告所在的代码,它位于org.hibernate.hql.ast.QueryTranslatorImpl中,部分摘录如下:
1. view plaincopy to clipboardprint?
2. QueryNode query = ( QueryNode ) sqlAst;
3. boolean hasLimit = queryParameters.getRowSelection() != null &&
queryParameters.getRowSelection().definesLimits();
4. boolean needsDistincting = ( query.getSelectClause().isDistinct() || hasLimit ) &&
containsCollectionFetches();
5. QueryParameters queryParametersToUse;
6. if ( hasLimit && containsCollectionFetches() ) {
7. log.warn( "firstResult/maxResults specified with collection fetch; applying in memory!" )
8. RowSelection selection = new RowSelection();
9. selection.setFetchSize( queryParameters.getRowSelection().getFetchSize() );
10. selection.setTimeout( queryParameters.getRowSelection().getTimeout() );
11. queryParametersqueryParametersToUse = queryParameters.createCopyUsing( selection );
12. }
13. else {
14. queryParametersqueryParametersToUse = queryParameters;
15. }
16. List results = queryLoader.list( session, queryParametersToUse );
17. QueryNode query = ( QueryNode ) sqlAst;
18. boolean hasLimit = queryParameters.getRowSelection() != null &&
queryParameters.getRowSelection().definesLimits();
19. boolean needsDistincting = ( query.getSelectClause().isDistinct() || hasLimit ) &&
containsCollectionFetches();
20. QueryParameters queryParametersToUse;
21. if ( hasLimit && containsCollectionFetches() ) {
22. log.warn( "firstResult/maxResults specified with collection fetch; applying in memory!" );
23. RowSelection selection = new RowSelection();
24. selection.setFetchSize( queryParameters.getRowSelection().getFetchSize() );
25. selection.setTimeout( queryParameters.getRowSelection().getTimeout() );
26. queryParametersqueryParametersToUse = queryParameters.createCopyUsing( selection );
27. }
28. else {
29. queryParametersqueryParametersToUse = queryParameters;
30. }
31. List results = queryLoader.list( session, queryParametersToUse );
关键在于if ( hasLimit && containsCollectionFetches() 这句判断,如果满足了这个条件,RowSelection将会被重新生成,原本分页需要的firstRow和maxRows属性将会丢失,后面的数据库分页自然也无法进行。Hibernate这么做的原因从代码上也很容易理解,如果查询需要限制条数(limit/offset)并且需要fetch结合对象,则重新生成RowSelection,进一步解释,就是当一个实体(A)和另一个实体(B)是One-To-Many关系的时候,一个需要fetch 的典型查询语句是“select distinct a from A a left join fetch a.b”,由于1个A可能对应多个B,这个时候数据库查询的结果条数和需要生成的A对象的条数可能不一致,所以无法利用数据库层的分页来实现,因为你真正想分页的是A而不是A left join B。出现这个警告就是提醒你这个查询实际上是查询了所有满足条件的数据,Hibernate是在内存中对其进行了假分页的处理。
这样,对于查询结果比较多的情况无疑是一个Hibernate性能上的潜在威胁。碰到这样的情况,将Many的查询进行分开也是一种解决办法。
【编辑推荐】
1. 分析Hibernate插入操作
2. 剖析Hibernate批量更新
3. 全面讲解Hibernate二级缓存
4. 讲述Hibernate核心接口
5. 概括Hibernate批量处理
【责任编辑:志京 TEL:(010)68476606】
原文:概括潜在的Hibernate性能问题
标 签: Hibernate性能
上一篇: 浅析Hibernate VO与PO区别 下一篇: 分析Hibernate自增主键
网友评论
查看所有评论(0)
通行证: 密码: 注册通行证
发表评论请注意语言文明
概括潜在的Hibernate性能问题
* http://developer.51cto.com 2009-09-24 13:45 佚名 IT168 我要评论(0)
这里介绍对于查询结果比较多的情况无疑是一个Hibernate性能上的潜在威胁。碰到这样的情况,将Many的查询进行分开也是一种解决办法。
学习Hibernate时,经常会遇到Hibernate性能问题,这里将介绍Hibernate性能问题的解决方法。
在使用Hibernate进行分页的过程中,如果你收到如下警告,那么这里就是一个潜在的Hibernate性能问题点:
WARNING: firstResult/maxResults specified with collection fetch; applying in memory!
出现这个警告的直接后果是:无论你想要看第几页的数据,从Hibernate打印出的SQL来看它总是查询了所有满足条件的结果。这是为什么呢?来看看这句警告所在的代码,它位于org.hibernate.hql.ast.QueryTranslatorImpl中,部分摘录如下:
1. view plaincopy to clipboardprint?
2. QueryNode query = ( QueryNode ) sqlAst;
3. boolean hasLimit = queryParameters.getRowSelection() != null &&
queryParameters.getRowSelection().definesLimits();
4. boolean needsDistincting = ( query.getSelectClause().isDistinct() || hasLimit ) &&
containsCollectionFetches();
5. QueryParameters queryParametersToUse;
6. if ( hasLimit && containsCollectionFetches() ) {
7. log.warn( "firstResult/maxResults specified with collection fetch; applying in memory!" )
8. RowSelection selection = new RowSelection();
9. selection.setFetchSize( queryParameters.getRowSelection().getFetchSize() );
10. selection.setTimeout( queryParameters.getRowSelection().getTimeout() );
11. queryParametersqueryParametersToUse = queryParameters.createCopyUsing( selection );
12. }
13. else {
14. queryParametersqueryParametersToUse = queryParameters;
15. }
16. List results = queryLoader.list( session, queryParametersToUse );
17. QueryNode query = ( QueryNode ) sqlAst;
18. boolean hasLimit = queryParameters.getRowSelection() != null &&
queryParameters.getRowSelection().definesLimits();
19. boolean needsDistincting = ( query.getSelectClause().isDistinct() || hasLimit ) &&
containsCollectionFetches();
20. QueryParameters queryParametersToUse;
21. if ( hasLimit && containsCollectionFetches() ) {
22. log.warn( "firstResult/maxResults specified with collection fetch; applying in memory!" );
23. RowSelection selection = new RowSelection();
24. selection.setFetchSize( queryParameters.getRowSelection().getFetchSize() );
25. selection.setTimeout( queryParameters.getRowSelection().getTimeout() );
26. queryParametersqueryParametersToUse = queryParameters.createCopyUsing( selection );
27. }
28. else {
29. queryParametersqueryParametersToUse = queryParameters;
30. }
31. List results = queryLoader.list( session, queryParametersToUse );
关键在于if ( hasLimit && containsCollectionFetches() 这句判断,如果满足了这个条件,RowSelection将会被重新生成,原本分页需要的firstRow和maxRows属性将会丢失,后面的数据库分页自然也无法进行。Hibernate这么做的原因从代码上也很容易理解,如果查询需要限制条数(limit/offset)并且需要fetch结合对象,则重新生成RowSelection,进一步解释,就是当一个实体(A)和另一个实体(B)是One-To-Many关系的时候,一个需要fetch 的典型查询语句是“select distinct a from A a left join fetch a.b”,由于1个A可能对应多个B,这个时候数据库查询的结果条数和需要生成的A对象的条数可能不一致,所以无法利用数据库层的分页来实现,因为你真正想分页的是A而不是A left join B。出现这个警告就是提醒你这个查询实际上是查询了所有满足条件的数据,Hibernate是在内存中对其进行了假分页的处理。
这样,对于查询结果比较多的情况无疑是一个Hibernate性能上的潜在威胁。碰到这样的情况,将Many的查询进行分开也是一种解决办法。
【编辑推荐】
1. 分析Hibernate插入操作
2. 剖析Hibernate批量更新
3. 全面讲解Hibernate二级缓存
4. 讲述Hibernate核心接口
5. 概括Hibernate批量处理
【责任编辑:志京 TEL:(010)68476606】
原文:概括潜在的Hibernate性能问题
标 签: Hibernate性能
上一篇: 浅析Hibernate VO与PO区别 下一篇: 分析Hibernate自增主键
网友评论
查看所有评论(0)
通行证: 密码: 注册通行证
发表评论请注意语言文明
发表评论
-
如何使用hibernate
2012-05-24 19:21 0一、选择Hibernate还是iBATIS都有它的道理: H ... -
关于hibernate自动建表和主键的数据类型的关系
2012-02-27 16:18 1143要想让hibernate自动建表, 1、除了 <prop ... -
用Spring+Hibernate链接时,在增删改时会报错: Write operations are not allowed in read-only mod
2011-09-11 19:53 884用Spring+Hibernate链接时,在增删改时会报错: ... -
[转]hibernate延迟加载
2011-04-26 11:41 5672007-12-01 [转]hibernate延迟 ... -
Hibernate利用XDoclet自动生成配置文件
2011-04-18 18:34 801Hibernate利用XDoclet自动生 ... -
如何利用 myeclipse 生成Hibernate 配置文件
2011-04-18 18:13 1247在hibernate中,每个数据表对应的其实是一个实体类,每个 ... -
Hibernate Synchronizer是一个Eclipse插件,可以自动生成*.hbm文件、持久化类和DAOs
2011-04-18 18:00 1895Hibernate Synchronizer是一个Eclips ... -
Hibernate auto produce
2011-04-18 17:52 981Hibernate 中需要class和mapp ... -
使用动态代理实现用AOP对数据库进行操作
2011-04-12 14:11 947使用动态代理实现用AOP对数据库进行操作 2008-03-14 ... -
Hibernate中cascade与inverse属性详解
2011-04-01 16:20 938Hibernate中cascade与inverse属性详解 ... -
事务和事务边界
2011-03-31 15:44 101310.1.2 事务和事务边界 http://book.51ct ... -
事务传播行为种类
2011-03-31 15:31 821事务传播行为种类 Spring在TransactionDef ... -
Hibernate saveOrUpdate分析
2011-03-31 15:30 861* Hibernate s ... -
使用Spring AOP代理方式实现声明式事务的原理
2011-03-31 15:28 1205使用Spring AOP代理方式实 ... -
Hibernate Session缓存概述
2011-03-31 15:27 1006* Hibernate Session缓存 ... -
解说Hibernate的工作原理实例
2011-03-31 15:26 874* 解说Hibernate的工作原理实例 ... -
简述Hibernate配置连接池
2011-03-31 15:25 842* 简述Hiber ... -
简单解析J2EE数据持久层设计
2011-03-31 15:24 980* 简单解 ... -
浅析Hibernate Callback接口
2011-03-31 15:23 893* 浅析Hibernate Callbac ... -
概述Hibernate equals()方法
2011-03-31 15:22 768* 概述Hiber ...
相关推荐
本话题将深入探讨“Hibernate性能测试代码”,以帮助我们理解如何有效地评估和优化Hibernate在实际应用中的表现。 首先,性能测试是软件开发过程中的关键环节,它旨在确定系统的响应时间、吞吐量和资源利用率等指标...
### Hibernate性能优化研究 #### 一、引言 随着企业级应用的发展,高效的数据持久化技术成为了提升系统性能的关键因素之一。Hibernate作为一种流行的面向Java环境的对象关系映射(Object-Relational Mapping,简称...
《Hibernate性能优化》 在Java应用开发中,Hibernate作为一个强大的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,如果不进行适当的优化,它可能会成为系统性能的瓶颈。以下是一些关于Hibernate性能优化...
珍藏的hibernate性能优化,如果对hibernate进行优化,很详细,是工作和面试的好助手
### 优化Hibernate性能的几点建议 #### 一、调整Fetch Size以提高性能 在使用Hibernate进行数据查询时,Fetch Size的设置对性能有着显著的影响。Fetch Size是指每次从数据库中取出的数据行数,默认情况下,Oracle...
### Hibernate性能:性能、规模与风险初评 #### 一、引言 随着软件系统的不断发展,数据持久化技术成为现代应用程序不可或缺的一部分。其中,Hibernate作为一款流行的Java ORM(Object Relational Mapping)框架,...
【提高Hibernate性能】 在开发大型企业级应用时,ORM框架如Hibernate在处理大量数据时可能会出现性能瓶颈。针对这种情况,优化Hibernate的配置和使用策略至关重要。以下是一些提高Hibernate性能的关键点: 1. **...
本文将深入探讨Hibernate性能优化中的一个重要概念——一级缓存,并结合给出的压缩包文件“hibernate_cache_level1”,来详细解析一级缓存的工作原理及其优化策略。 一级缓存是Hibernate内置的一种缓存机制,它存在...
Hibernate 性能优化 在 Hibernate 中,性能优化是非常重要的,因为它直接影响着应用程序的效率和可扩展性。...Hibernate 性能优化需要我们注意批量处理和 1+n 问题,并使用相应的解决方法来避免这些问题。
Hibernate分页可能引起的性能...在使用Hibernate进行分页的过程中,如果你收到如下警告,那么这里就是一个潜在的性能问题点: WARNING: firstResult/maxResults specified with collection fetch; applying in memory!
《Hibernate性能调优》 在Java企业级应用开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,被广泛用于数据库操作。然而,如果不合理地使用或配置,Hibernate可能会导致性能瓶颈。本文将深入探讨如何对...
《Hibernate性能优化共9页.pdf》的压缩包文件聚焦于Java开发中的一个重要框架——Hibernate的性能调优。Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作,但同时也可能带来性能问题。以下...
然而,对于初次接触 Hibernate 的开发者来说,可能会遇到性能方面的问题,尤其是在与传统的 JDBC 方式相比时。这些问题如果不加以解决,很容易影响到项目的整体进度。本文将详细介绍如何优化 Hibernate 的性能,并...
在提到提升Hibernate性能的魔方——IronTrack SQL时,我们必须首先了解IronTrack SQL的背景和功能。IronTrack SQL是基于Apache许可证的开源工具,通过与开源JDBC驱动p6spy合作,提供了一个增强的对基于Hibernate的...
在进行大型项目开发时,性能优化是至关重要的,特别是对于基于SSH(Struts、Spring、Hibernate)这样的企业级框架的应用。SSH性能优化主要是针对Struts的MVC处理、Spring的依赖注入以及Hibernate的对象关系映射进行...
在IT领域,尤其是在Java开发中,Hibernate作为一款流行的开源对象关系映射(ORM)框架,其缓存机制是实现高性能数据库交互的关键技术之一。本文将深入探讨Hibernate缓存的原理、类型及其对性能优化的影响。 ### ...