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

2022-08-31 05:29:01

在Hibernate 3中,有没有办法在HQL中执行相当于以下MySQL限制的方法?

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

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


答案 1

几年前,当被问及为什么这在Hibernate 2中起作用而在Hibernate 3中不起作用时,这是在Hibernate论坛上发布的:

限制从来都不是 HQL 中受支持的子句。你打算使用 setMaxResults()。

因此,如果它在Hibernate 2中工作,这似乎是巧合,而不是设计。我认为这是因为Hibernate 2 HQL解析器将替换它识别为HQL的查询位,并将其余部分保留原样,因此您可以偷偷进入一些本机SQL。然而,Hibernate 3有一个合适的AST HQL解析器,而且它不那么宽容。

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


答案 2
 // SQL: SELECT * FROM table LIMIT start, maxRows;

Query q = session.createQuery("FROM table");
q.setFirstResult(start);
q.setMaxResults(maxRows);

推荐