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

Hibernate命名查询及其性能优势?

拓拔骁
2023-03-14
问题内容

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

1)当我使用命名查询时,只是查询对象被缓存在第二级缓存中。当我说只是查询对象时,这意味着只缓存查询语法而不是查询结果。如果它的权利是正确的,那么可能仅在HQL的情况下才有用,因为那可以避免将HQL转换为本机查询,因此每次触发的查询都会具有良好的时间性能。

但是,如果我们使用本机sql,则命名查询不会提供这种优势,因为在这种情况下不会进行翻译。

因此,命名查询的主要优势是建立sql的中央存储库。是的,在HQL的情况下,它还可以为我们节省到本地sql的翻译时间,但是请记住,查询对象将占用jvm的生命周期,并且会占用一些内存。所以这里要折衷。


问题答案:

命名查询有两个小优点:

  • 创建会话工厂时将检查其语法,从而使应用程序在出现错误的情况下快速失败(这可能表明您的应用程序缺少某些单元测试)
  • 可以从多个位置访问和使用它们(无论如何这可能表示存在设计问题)

它们还有一个缺点:使用命名查询读取或调试代码时,如果不搜索其定义就无法立即查看正在执行哪个查询。

其余的实际上并不重要:

  • 与实际执行查询的成本相比,将HQL查询转换为SQL的成本可以忽略不计
  • 缓存查询的内存成本确实很小。请记住,Hibernate无论如何都需要在内存中存储所有实体元数据。

我倾向于在使用查询的代码中定义查询,并对它们进行单元测试。这使代码更易读,更健壮。



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

  • 本文向大家介绍MongoDB查询性能优化验证及验证,包括了MongoDB查询性能优化验证及验证的使用技巧和注意事项,需要的朋友参考一下 结论: 1、 200w数据,合理使用索引的情况下,单个stationId下4w数据。mongodb查询和排序的性能理想,无正则时client可以在600ms+完成查询,qps300+。有正则时client可以在1300ms+完成查询,qps140+。 2、 Mon

  • 问题内容: 我不太擅长SQL,因此我要求你们提供有关编写查询的帮助。 [SQL查询-表连接问题]https://codingdict.com/questions/208252) 我得到了答案,并且可以正常工作!它只是明显的缓慢。我讨厌这样做,但是我真的希望有人在那里推荐一些优化查询的方法。我什至没有自己尝试过,因为我对SQL不够了解,甚至无法开始使用谷歌搜索。 问题答案: 可能有帮助的是在要加入的

  • 我试图比较Hibernate条件和命名查询的性能。我知道这一切都取决于实际的查询本身,最后一个字取决于它们在运行时如何配置文件。尽管如此,试图理清每一个都有什么。 我试图将Q分为两个部分&寻找两者的验证/更正: 命名查询与HQL相比具有相同的优势--查询在启动时被解析一次。然后从应用程序中任何必要的地方执行。 第2部分--比较两者: 所以在这张图里, 提亚。

  • 我正在尝试将Hibernate Criteria与命名查询进行性能比较。我知道这一切都取决于实际查询本身,最后一个词是它们在运行时的配置文件。尽管如此,仍在尝试整理每个查询的内容。 我试图将Q分为两部分 PART-1 -- Hibernate条件和命名查询的基本工作原理: Criteria适用于参数。在运行时,查询不需要解析——有几个搜索和“表单存在”参数,例如对结果进行排序,将它们返回为可滚动的

  • 问题内容: 一位新同事刚刚建议在Hibernate中使用带有注释(即@NamedQuery)的命名HQL查询,而不是将HQL嵌入到我们的XxxxRepository类中。 我想知道的是,使用注释是否可以提供集中查询以外的任何优势? 特别是,是否有一些性能提升,例如因为查询仅在加载类时解析一次,而不是每次执行Repository方法时解析一次? 问题答案: 来自Pro EJB 3(Mike Keit