一尘不染

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

hibernate

在Hibernate 3中,有没有办法等效于以下HQL中的MySQL限制?

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

如果可能,我不想使用setMaxResults。这肯定在较旧的Hibernate / HQL版本中是可行的,但似乎已经消失了。


阅读 277

收藏
2020-06-20

共1个答案

一尘不染

几年前,当有人问到为什么它在Hibernate
2中有效但在Hibernate
3中无效时,此消息发布在Hibernate论坛上:

在HQL中, 从不 支持Limit 子句。您应该使用setMaxResults()。

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

我认为Query.setMaxResults()确实是您唯一的选择。

2020-06-20