在 Hibernate 3 中,有没有办法在 HQL 中执行与以下 MySQL 限制等效的操作?
select * from a_table order by a_table_column desc limit 0, 20;
如果可能的话,我不想使用 setMaxResults 。这在旧版本的 Hibernate/HQL 中绝对是可能的,但它似乎已经消失了。
几年前,当被问及为什么这在 Hibernate 2 中有效但在 Hibernate 3 中无效时,这已发布在 Hibernate 论坛上:
在 HQL 中,限制 从来都不是受支持的子句。 您应该使用 setMaxResults()。
因此,如果它在 Hibernate 2 中有效,这似乎是巧合,而不是设计。我 认为 这是因为 Hibernate 2 HQL 解析器将替换它识别为 HQL 的查询位,并保持其余部分不变,因此您可以潜入一些本机 SQL。然而,Hibernate 3 有一个适当的 AST HQL 解析器,而且它的宽容度要低得多。
我认为Query.setMaxResults()真的是你唯一的选择。
Query.setMaxResults()