小编典典

如何在 JPQL 或 HQL 中进行限制查询?

all

在 Hibernate 3 中,有没有办法在 HQL 中执行与以下 MySQL 限制等效的操作?

select * from a_table order by a_table_column desc limit 0, 20;

如果可能的话,我不想使用 setMaxResults 。这在旧版本的 Hibernate/HQL 中绝对是可能的,但它似乎已经消失了。


阅读 167

收藏
2022-05-16

共1个答案

小编典典

几年前,当被问及为什么这在
H​​ibernate 2 中有效但在 Hibernate 3 中无效时,这已发布在 Hibernate
论坛上:

在 HQL 中,限制 从来都不是受支持的子句。 您应该使用 setMaxResults()。

因此,如果它在 Hibernate 2 中有效,这似乎是巧合,而不是设计。我 认为 这是因为 Hibernate 2 HQL 解析器将替换它识别为
HQL 的查询位,并保持其余部分不变,因此您可以潜入一些本机 SQL。然而,Hibernate 3 有一个适当的 AST HQL
解析器,而且它的宽容度要低得多。

我认为Query.setMaxResults()真的是你唯一的选择。

2022-05-16