Hibernate:获取按 id ASC 排序的最后 N 行

Hibernate: get last N rows ordered by id ASC

我有一个table这样的

id    name    age
1     John    54
2     Emily   68
3     Tom     235
4     Jack    68
5     Harry   12
6     Ron     68
7     ...
8     ...
9     ...     68
...   ...     ...
...   ...     ...
...   ...     ...
...   ...     68
...   ...     ...

现在我用这段代码来获取特定年龄的人:

CriteriaBuilder cb = session.getCriteriaBuilder();
CriteriaQuery<Person> cr = cb.createQuery(Person.class);
Root<Person> root = cr.from(Person.class);
cr.select(root).where(cb.equal(root.get("age"), 68));
Query<Person> query = session.createQuery(cr);
List<Person> result = query.getResultList();
session.close();

它将 return 所有 68 岁的人。

我可以通过添加这个获得N个第一个68岁的人:

query.setMaxResults(N);

但是我不确定如何最后得到 N?

我试过了

int total = ((Long) count.uniqueResult()).intValue();
int start = total - N;
query.setFirstResult((start));
query.setMaxResults(N);

但它没有 return 最后 N 个(当 table 按 id ASC 排序时,最后 N 个是最后 N 行)。

只需调转结果的顺序即可。您可以通过添加以下内容来做到这一点:

cr.orderBy(cb.desc(root.get("id")));

如果你需要它变量,传递一个布尔值到方法中:

if (selectFirst) {
    cr.orderBy(cb.asc(root.get("id")));
} else {
    cr.orderBy(cb.desc(root.get("id")));
}