正如休眠文档所说,命名查询的目的是将项目中不同位置的 HQL 清除到某些 xml 中的单个位置(在声明性方法的情况下)。这意味着在查询修改的情况下不需要重新编译,但重新加载会话工厂是required 这意味着在大多数情况下服务器会在查询对象被缓存时启动。但是在注释的情况下,我需要在实体级别定义命名查询。所以这里再次编译需要。我的问题是命名查询是否也有助于提高性能。这是我的理解:-
1)当我使用命名查询时,只是查询对象被缓存在二级缓存中。当我说只是查询对象时,这意味着只缓存查询语法而不是查询结果。对吗?如果它是正确的,那么它可能仅在 HQL 的情况下才有用,因为我们可以避免将 HQL 转换为本地查询,每次查询被触发并具有良好的时间性能。
但是,如果我们使用本机 sql,命名查询不会提供这种优势,因为在这种情况下不会发生任何翻译。
因此,命名查询的主要优点是创建 sqls 的中央存储库。是的,在 HQL 的情况下,它也可以为我们节省一些到本地 sql 的翻译时间,但请记住,查询对象将在 jvm 的生命周期内存在,并且会消耗一些内存。所以有些权衡在这里。