当前位置: 首页 > 知识库问答 >
问题:

Hibernate-条件与命名查询

宇文念
2023-03-14

我试图比较Hibernate条件和命名查询的性能。我知道这一切都取决于实际的查询本身,最后一个字取决于它们在运行时如何配置文件。尽管如此,试图理清每一个都有什么。

我试图将Q分为两个部分&寻找两者的验证/更正:

命名查询与HQL相比具有相同的优势--查询在启动时被解析一次。然后从应用程序中任何必要的地方执行。

第2部分--比较两者:

所以在这张图里,

提亚。

共有1个答案

慕震博
2023-03-14

在理论上,标准应该比HQL查询具有更少的开销(命名查询除外,我将介绍它)。这是因为标准不需要解析任何东西。使用基于ANTLR的解析器解析HQL查询,然后将生成的AST转换为SQL。但是,使用HQL/JPAQL,您可以定义命名查询,SessionFactory启动时生成SQL。理论上,命名查询的开销比标准小。因此,就SQL生成开销而言,我们有:

  1. 命名为HQL/JPAQL查询-SQL生成只发生一次。
  2. 条件-在生成之前不需要解析。
  3. (未命名)HQL/JPAQL查询-解析,然后生成。也就是说,在我看来,基于解析和SQL生成的开销来选择查询技术可能是一个错误。与在具有真实数据的真实数据库服务器上执行真实查询相比,此开销通常非常小。如果在分析应用程序时确实出现了这种开销,那么也许您应该切换到命名查询。

以下是我在决定标准和HQL/JPAQL时考虑的事项:

  • 首先,您必须决定是否可以在代码中依赖于Hibernate专有API。JPA没有标准。
  • Criteria非常擅长于处理许多可选的搜索参数,例如您可能会在具有多参数“搜索表单”的典型web页面上找到这些参数。对于HQL,开发人员倾向于使用StringBuilder添加where子句表达式(避免这种情况!)。有了条件,就不需要这样做了。
  • HQL/JPAQL可以用于大多数其他事情,因为代码更小,开发人员更容易理解。
  • 如果使用HQL,可以将非常频繁的查询转换为命名查询。我更喜欢稍后进行分析。
 类似资料:
  • 我正在尝试将Hibernate Criteria与命名查询进行性能比较。我知道这一切都取决于实际查询本身,最后一个词是它们在运行时的配置文件。尽管如此,仍在尝试整理每个查询的内容。 我试图将Q分为两部分 PART-1 -- Hibernate条件和命名查询的基本工作原理: Criteria适用于参数。在运行时,查询不需要解析——有几个搜索和“表单存在”参数,例如对结果进行排序,将它们返回为可滚动的

  • 我对命名查询有问题,但我不明白为什么它不工作。 我是这样定义查询的: 在这里我使用它: 错误:由:组织引起。冬眠HibernateException:命名查询中的错误:getUserRatings

  • 我需要 在Hibernate条件中。由于这个问题,我知道如何将分组结果作为的列表: 我不知道如何添加HAVING子句。我想,它类似于,但是我如何引用计数呢? 有没有办法在查询中引用结果元组元素?

  • subcompany.hbm.xml 子单位表 branch.java 指定表 我需要帮助编写条件查询使用提供的SQL。

  • 问题内容: 我有以下实体 以下是我的行动 我想获取具有特定操作集的规则列表,我正在尝试执行此操作 但是获取org.hibernate.MappingException:集合不是一个关联:异常。 编辑 因此,在jbrookover的指导下,我尝试为Action命名为RuleAction的包装器类,并能够建立一个oneToMany关系,此外,我还如下修改了查询 但是,这将返回所有具有EMAIL或POS

  • 问题内容: 谁能指出我如何将order by子句作为命名参数传递给HQL? 有效的示例: 无效的示例: 问题答案: 不支持,只能在and 子句中使用输入参数,并且不能为子句使用参数。或者,如果我改写,您不能对列使用参数,只能对值使用。因此,要么: 有尽可能多的命名查询排序顺序 将排序字符串连接到查询字符串 使用条件查询