gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:02:34 25 4
gpt4 key购买 nike

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

1) 当我使用命名查询时,只有查询对象缓存在二级缓存中。当我说只是查询对象时,它意味着只是查询语法被缓存而不是查询结果。对吗?如果它是正确的,那么它可能仅在 HQL 的情况下有用,因为我们可以避免将 HQL 转换为 native 查询,每次触发查询并具有一些良好的时间性能。

但是如果我们使用原生 sql,命名查询就没有这种优势,因为在这种情况下不会发生转换。

因此,命名查询的主要优点是创建 sql 的中央存储库。是的,在 HQL 的情况下,它也可以为我们节省一些转换为 native sql 的时间,但请记住,查询对象将在 jvm 的生命周期内存在,并且会消耗一些内存。所以这里有些权衡。

最佳答案

命名查询有两个小优点:

  • 在创建 session 工厂时检查它们的语法,使应用程序在出现错误时快速失败(这可能表明您的应用程序缺少一些单元测试)
  • 可以从多个地方访问和使用它们(这可能表明存在设计问题)

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

其余的真的不重要:

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

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

关于java - Hibernate命名查询及其性能优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15596025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com