`
weifly
  • 浏览: 239916 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate的hql中的java常量会引起性能问题

 
阅读更多

在多线程环境中,hibernate把hql转换为sql时,会频繁的调用classloader中的方法来加载class。在某些中间件中(例如tomcat),classloader在加载class时,是同步操作。这种组合大大降低了应用程序的性能。

 

相关文章

https://hibernate.atlassian.net/browse/HHH-10746

https://hibernate.atlassian.net/browse/HHH-4959

 

在hibernate 5.2.6版中,修改了这个问题,增加了配置

hibernate.query.conventional_java_constants

默认值为true,即在hql中不支持java常量的引用

 

例如:

from Table t where t.c_bh=com.xxx.Table.N_XXX

不会尝试解析“t.c_bh”,但是会尝试解析“com.xxx.Table.N_XXX

 

之前版本的hibernate,在hql中碰到“xx.xx”时,都会调用classloader来尝试加载类,这个会导致classloader加载很多不存在的类(调用开销大),这是导致性能下降的原因。

 

堆栈1:

	at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:390)
	- waiting to lock <0x00000007315a3870> (a org.eclipse.jetty.webapp.WebAppClassLoader)
	at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:383)
	at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:95)
	at org.hibernate.util.ReflectHelper.getConstantValue(ReflectHelper.java:122)
	at org.hibernate.hql.ast.QueryTranslatorImpl$JavaConstantConverter.handleDotStructure(QueryTranslatorImpl.java:569)
	at org.hibernate.hql.ast.QueryTranslatorImpl$JavaConstantConverter.visit(QueryTranslatorImpl.java:564)
	at org.hibernate.hql.ast.util.NodeTraverser.visitDepthFirst(NodeTraverser.java:40)
	at org.hibernate.hql.ast.util.NodeTraverser.visitDepthFirst(NodeTraverser.java:42)
	at org.hibernate.hql.ast.util.NodeTraverser.visitDepthFirst(NodeTraverser.java:42)
	at org.hibernate.hql.ast.util.NodeTraverser.visitDepthFirst(NodeTraverser.java:41)
	at org.hibernate.hql.ast.util.NodeTraverser.visitDepthFirst(NodeTraverser.java:42)
	at org.hibernate.hql.ast.util.NodeTraverser.visitDepthFirst(NodeTraverser.java:41)

 

堆栈2:

	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:171)
	at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:100)
	at org.hibernate.util.ReflectHelper.getConstantValue(ReflectHelper.java:122)
	at org.hibernate.hql.ast.QueryTranslatorImpl$JavaConstantConverter.handleDotStructure(QueryTranslatorImpl.java:569)
	at org.hibernate.hql.ast.QueryTranslatorImpl$JavaConstantConverter.visit(QueryTranslatorImpl.java:564)
	at org.hibernate.hql.ast.util.NodeTraverser.visitDepthFirst(NodeTraverser.java:40)
	at org.hibernate.hql.ast.util.NodeTraverser.visitDepthFirst(NodeTraverser.java:41)
	at org.hibernate.hql.ast.util.NodeTraverser.visitDepthFirst(NodeTraverser.java:41)
	at org.hibernate.hql.ast.util.NodeTraverser.visitDepthFirst(NodeTraverser.java:41)
	at org.hibernate.hql.ast.util.NodeTraverser.traverseDepthFirst(NodeTraverser.java:33)
	at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:254)
	at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:157)

 

 

 

分享到:
评论

相关推荐

    Hibernate-HQL

    总的来说,Hibernate-HQL是Java开发中处理数据库操作的重要工具,它简化了数据库操作,提高了开发效率。深入学习和理解HQL,能够帮助开发者更好地利用Hibernate框架,构建高效且易于维护的Java应用。

    Hibernate Part 3:核心API和常量配置

    **描述解析:**虽然描述为空,但根据标题可以推测这篇博客可能详细讲解了如何使用Hibernate的主要API进行数据操作,并且涉及到了Hibernate配置文件中的常量设置,这些设置对于优化性能和确保正确性至关重要。...

    hibernate中英文API文档

    Hibernate是一款开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的编程方式来操作数据库,极大地简化了Java应用程序与数据库之间的交互。这个压缩包包含的资源是Hibernate的中英文API文档,以及一些指南,...

    使用模式设计及java5新特性在HibernateDAO中的应用

    标题 "使用模式设计及java5新特性在HibernateDAO中的应用" 涉及到的是软件开发中的几个关键概念,包括模式设计、Java 5的新特性以及它们如何在Hibernate DAO层中得到应用。在这个主题中,我们将深入探讨这些知识点,...

    hibernate源码包

    在Hibernate源码中,可能会包含版本信息、许可证信息等。 通过阅读和研究这些源码,开发者可以深入理解Hibernate如何进行对象持久化、事务管理、查询优化等核心功能,这对于提升Java开发者的ORM技能,尤其是数据库...

    Hibernate 5.3.1api 文档

    在Hibernate 5.3.1版本中,引入了对Java Persistence API (JPA) 2.2的支持,进一步增强了其功能和灵活性。JPA 2.2提供了更丰富的查询语言(JPQL)和更多的元数据注解,使得数据库操作更为简便。 Hibernate 5.3.1 ...

    JSP+Struts+HiberNate的博客系统

    在大量数据展示时,分页可以避免一次性加载过多内容导致的性能问题。通常,分页是通过设置每页显示的数量和当前页码来实现的。在Struts中,可以通过传递参数来控制这些值,而Hibernate则可以配合使用`setFirstResult...

    Struts2+Spring4+Hibernate5整合

    Hibernate5引入了新的特性,如批处理更新、HQL改进等,提高了性能和灵活性。 整合Struts2、Spring4和Hibernate5,通常遵循以下步骤: 1. **配置环境**:确保项目中包含这三个框架的库文件,并在pom.xml或build....

    hibernate.properties详解

    这部分定义了查询语言的常量和函数名,对于使用Hibernate HQL(Hibernate Query Language)进行查询非常重要。 - **hibernate.query.substitutions**:用于替换查询中的某些值。例如,在这里设置`yes`和`no`的对应...

    hibernate 3.3.1.GA API

    通过深入学习这些文档,开发者可以熟练掌握Hibernate的核心概念,如Session、Transaction、Criteria查询、HQL(Hibernate Query Language)、Entity、Collection Mapping等,从而在实际开发中更加高效地操作数据库。...

    Java语言基础下载

    在Java中使用HQL 709 内容总结 712 独立实践 712 第三十七章 Spring介绍 713 学习目标 713 Spring简介 714 IOC控制反转 714 Spring的容器 715 AOP面向切面编程 715 AOP的专业术语 715 Spring事务管理 718 Spring与...

    hibernate.properties

    在Java开发环境中,Hibernate作为一款优秀的对象关系映射(ORM)框架,在简化数据库操作、提高开发效率方面发挥着重要作用。而`hibernate.properties`文件则是Hibernate框架的核心配置文件之一,用于定义数据库连接...

    ssh框架struts2 spring hibernate

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。它们分别负责Web层、服务层和持久层的管理,构建出高效、灵活的企业级应用程序。 Struts2是MVC(Model-View-...

    Java开发工程师招聘面试题

    Java开发工程师面试题通常涉及到Java语言的核心特性、集合框架、多线程、设计模式、ORM框架如Hibernate、以及Web开发中的MVC架构和框架如Struts。以下是对这些知识点的详细解释: 1. `final`、`finally`、`finalize...

    J2EE面试题(包含了大部分的框架面试题如:hibernate Spring Strust 等)

    在IT行业中,J2EE(Java 2 Platform, Enterprise Edition)是企业级应用程序开发的基石,它提供了一套规范和API,使得开发者可以构建可扩展、安全且事务处理能力强大的多层分布式应用。本资源主要关注的是J2EE相关的...

    Hibernate API

    - HQL和Criteria查询支持分页、排序、聚合函数,能更好地避免N+1查询问题。 - `join fetch`可以显式执行连接查询,避免多次查询。 - 使用`@BatchSize`指定批处理大小,提高批量读取效率。 8. **元数据信息** - ...

    阿里Java开发手册

    ORM规约:对象关系映射(ORM)规约涉及使用Java中的ORM框架(如Hibernate)的规范,包括实体类映射和查询语言(如HQL)的使用。 四、工程规约 应用分层:应用分层规约对应用程序的架构分层提出指导,包括不同层次...

    struts2+hibernate+spring整合实例小程序

    Struts2、Hibernate和Spring是Java开发中常用的三大框架,它们各自负责Web应用程序的不同层面:Struts2负责表现层管理,Hibernate处理数据持久化,而Spring则提供了全面的依赖注入和面向切面编程功能,以及对其他...

    java笔试面试题(含有笔试题,核心技术,重点知识,struts,hibernate,spring,eclipse)

    - **HQL**:Hibernate Query Language,用于查询对象的查询语言。 #### 十七、Spring - **IOC/DI**:Inversion of Control/Dependency Injection,控制反转/依赖注入,用于解耦组件间的依赖关系。 - **AOP**:...

    struts+hibernate+spring框架增删改查

    Struts、Hibernate和Spring是Java开发中常用的三个开源框架,它们各自负责Web应用程序的不同层面,组合使用能够构建出高效、可维护的系统。Struts1是MVC(Model-View-Controller)架构的实现,主要处理请求和视图的...

Global site tag (gtag.js) - Google Analytics