加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:54:36 所属栏目:Java 来源:网络整理
导读:正如hibernate文档所说,命名查询的目的是将HQL从项目中的不同位置清除到某个xml中的单个位置(在声明方法的情况下).这意味着在查询修改的情况下不需要重新编译,但会话工厂的重新加载是必需的,这意味着在大多数情况下,当缓存查询对象时,服务器启动.但是在注释
正如hibernate文档所说,命名查询的目的是将HQL从项目中的不同位置清除到某个xml中的单个位置(在声明方法的情况下).这意味着在查询修改的情况下不需要重新编译,但会话工厂的重新加载是必需的,这意味着在大多数情况下,当缓存查询对象时,服务器启动.但是在注释的情况下,我需要在实体级别定义命名查询.所以这里再次编译需要.我的问题是在性能方面也提到了查询帮助.以下是我的理解: –

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

但是如果我们使用本机sql,则命名查询不能提供这种优势,因为在这种情况下不会发生转换.

所以命名查询的主要优点是制作sqls的中央存储库.是的,在HQL的情况下,它可以节省我们对本机sql的一些翻译时间,但请记住,查询对象将在jvm的生命周期中使用,并将消耗一些内存.所以有些人在这里交易.

解决方法

命名查询有两个小优点:

>在创建会话工厂时检查它们的语法,使得应用程序在发生错误时快速失败(这可能表明您的应用程序缺少某些单元测试)
>可以从多个地方访问和使用它们(这可能表明设计问题无论如何)

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

其余的真的不重要:

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

我更倾向于在使用它的代码中定义查询,并对它们进行单元测试.这使代码更具可读性,更强大.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读