一尘不染

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

hibernate

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

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

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


阅读 310

收藏
2020-06-20

共1个答案

一尘不染

来自Pro EJB 3(Mike Keith):

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

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

2020-06-20