我是HQL的新手。我有以下工作HQL查询:
from Order as o where o.account.profile.userId='abc' order by o.orderID desc
此查询返回用户 abc 下达的订单列表。用户可以在DB中放置0到5000+个订单。但我想只显示前5 条记录(订单)。我正在使用java List的子列表功能。
我可以使用HQL查询直接获取前5条记录吗?这是编写此查询的更有效方法吗?
答案 0 :(得分:17)
您可以在运行查询之前通过调用查询对象上的setFirstResult()
和setMaxResults()
函数来限制查询返回的结果。像这样:
Query query = session.createQuery("from Order as o where o.account.profile.userId='abc' order by o.orderID desc");
query.setFirstResult(0);
query.setMaxResults(5);
List result = query.list();
这取决于您使用的DBMS是否将直接在DBMS中处理。
答案 1 :(得分:4)
使用Criteria.setMaxResults(..)
:
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querycriteria.html
答案 2 :(得分:3)
直接来自http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-examples
Query q = s.createFilter( collection, "" ); // the trivial filter
q.setMaxResults(PAGE_SIZE);
q.setFirstResult(PAGE_SIZE * pageNumber);
List page = q.list();