Hibernate——条件与命名查询

标签 hibernate orm criteria named-query

我正在尝试比较Hibernate Criteria命名查询以提高性能。我知道这一切都取决于实际查询本身,最后一句话是它们在运行时如何分析。尽管如此,还是试图弄清楚每个内容的内容。

我尝试将问题分为两部分并寻求对这两部分的验证/更正:

第 1 部分——Hibernate Criteria 和命名查询的基本工作原理:

标准适用于参数。 在运行时,查询不需要解析——有几个搜索和“呈现形式”参数,例如 对结果进行排序,将其返回为可滚动等。 还没有阅读/验证这一点,但 Criteria 的工作原理是 字段索引(基于其上设置的参数) 让这一切变得更快。

所以,Criteria 与普通 HQL 相比的优势 是其执行期间的速度。

命名查询与 HQL 相比具有相同的优势—— 查询在启动时被解析一次。然后执行 从应用程序中任何需要的地方。

第 2 部分——两者比较:

所以在这张照片中,

标准和命名查询如何相互比较?

条件非常适合跨多个表的复杂查询 和多个参数——有办法优化,从而使查询更快(?)

命名查询具有“define-once-use-everywhere”的优点,并且 对于“轻度”查询来说相当不错—— 通常在单个表上使用少量参数进行不太复杂的搜索。在频繁查询时效果更好。

注意:见过很有用的Hibernate Criteria vs HQL: which is faster?以及其他一些讨论。

TIA。

最佳答案

您不会根据性能来选择其中之一。最终无论如何都变成了SQL查询,重要的是SQL查询的性能。

执行 SQL 查询比解析 HQL 查询并将其转换为 SQL 慢几个数量级。因此,即使您不使用命名查询,性能也不会明显变差。

您可以根据功能和可读性来选择 HQL 的标准。

如果您想要可读的内容,请使用 HQL 查询。

如果您想基于各种可选的搜索条件动态地编写查询,那么 Criteria API 允许这样做,并且比动态编写 HQL 查询更方便。

关于Hibernate——条件与命名查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23025030/

相关文章:

java - 在 hibernate 查询中给出条件以获取开始日期为上个月日期的值,即当前月份减 1

spring - Hibernate Search 的使用、何时使用以及为什么

php - 在 Doctrine 2 实体上映射额外的行

java - 延迟初始化异常

java - 在测试之间重置 JPA 生成的值

php - Laravel:如何查询多个间接相关的表?

php - 如何在 Symfony 中手动调度 Doctrine/Kernel 事件?

java - Jpa条件,将枚举类型转换为字符串

java - 如何使用标准中的限制来限制结果数据

c# - 在 NHibernate 中全局查找对象引用