当前位置: 首页 > 面试题库 >

是否优化了Hibernate命名的HQL查询(在批注中)?

端木野
2023-03-14
问题内容

一位新同事刚刚建议在Hibernate中使用带有注释(即@NamedQuery)的命名HQL查询,而不是将HQL嵌入到我们的XxxxRepository类中。

我想知道的是,使用注释是否可以提供集中查询以外的任何优势?

特别是,是否有一些性能提升,例如因为查询仅在加载类时解析一次,而不是每次执行Repository方法时解析一次?


问题答案:

来自Pro EJB 3(Mike Keith):

“ …我们建议尽可能使用命名查询。持久性提供程序通常会采取步骤将JPQL命名查询预编译为SQL,这是应用程序部署或初始化阶段的一部分。”

尽管本书是关于JPA的,但一般建议适用于Hibernate。但是,由于Hibernate缓存了已解析的HQL /
JPQL,因此您可能不会看到很大的性能提升。使用命名查询的另一个优点是,它使您可以选择在部署时使用映射文件覆盖查询,而不必重建应用程序。如果需要在生产中调整查询,则很有用。



 类似资料:
  • 问题内容: 有没有办法使用HQL在Grails中使用hibernate命名查询? 我已经在《利用hibernate》一书中阅读了有关它们的内容,想知道是否有办法在Grails中使用它们。 像这样的映射文件中包含命名查询以及类映射: 现在,我确定可以包含一个 hibernate映射文件, 并将其集成到Grails GORM配置中,因为在此声明,包含 hibernate映射文件的 可以在Grails中

  • 问题内容: 给出以下HQL查询: 我使用Query对象的方法进行设置。 我想使用对象进行设置,但是在查看Hibernate文档和方法列表时,我看不出要使用哪种明显的选择。有任何想法吗? 问题答案: 使用,的Javadoc在这里。 有四种变体可供选择。

  • 问题内容: 就像hibernate文档所说的那样,命名查询的目的是将HQL从项目中的不同位置清除到某个xml中的单个位置(在声明方法的情况下),这意味着在查询修改的情况下不需要重新编译,而是重新加载会话工厂这是必需的,这意味着在大多数情况下,由于查询对象被缓存,服务器将启动。但是在注释的情况下,我需要在实体级别定义命名查询。因此,这里再次需要编译。我的问题是命名查询在性能上是否也有帮助。这是我的理

  • 问题内容: 我想知道是否可以在@Query批注中包含子查询(org.springframework.data.jpa.repository.Query;) 我在第一个子查询括号上得到QuerySyntaxException。 这是我的查询 谢谢! 问题答案: 不可以,JPQL查询的select子句中不能包含子查询。 JPQL在WHERE和HAVING子句中支持子查询。它可以(至少)是ANY,SOM

  • 问题内容: 有没有一种方法可以将HQL命名查询外部化为外部文件。我有太多的命名查询,在实体类的开头使用和会很麻烦。 有没有一种方法可以将多个文件外部化? 问题答案: 您可以将查询放入域对象的根包中的类中。但是,您必须使用Hibernate自己的和批注,而不是使用。 示例文件: 然后,您必须将包添加到中。我使用Spring,所以需要设置属性: 您也可以将类型和过滤器定义放在同一文件中。

  • 1. 前言 本节课程和大家一起学习 Hibernate 中的 HQL ( Hibernate 查询语言)。通过本节课程的学习,你将了解到: HQL 基础语法; HQL 查询的具体实现。- 2. HQL 查询?前面不是讲过?用过吗? 但是,前面的查询都是简单查询,真实项目中的查询需求要远比这个复杂。仅仅依靠 get()、load() 是远远达不到要求。 Hibernate 提供了灵活多样的查询机制,