一尘不染

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

java

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

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

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


阅读 372

收藏
2020-03-02

共1个答案

一尘不染

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

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

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

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

2020-03-02