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

新手上路,请多包涵

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

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

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

原文由 stevedbrown 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 534
2 个回答

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

Limit 从来不是 HQL 中支持的子句。您应该使用 setMaxResults()。

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

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

原文由 skaffman 发布,翻译遵循 CC BY-SA 2.5 许可协议

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

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

原文由 Jessu 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题