java - Hibernate:获取按 id ASC 排序的最后 N 行
问题描述
我有一张这样的桌子
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();
它将返回所有年龄 = 68 的人。
我可以通过添加以下内容来获得前 N 个 68 岁的人:
query.setMaxResults(N);
但是我不确定如何最后获得 N?
我试过了
int total = ((Long) count.uniqueResult()).intValue();
int start = total - N;
query.setFirstResult((start));
query.setMaxResults(N);
但它并没有准确返回 N last(当表按 id ASC 排序时,N last 是最后 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")));
}
推荐阅读
- python - 我无法让我的 spritesheet 在 pygame 中工作
- c - 给定一个由字母和数字组成的字符串,找出给定字符串中每个数字出现的频率
- visual-studio - 静态库项目的 Visual Studio 2019 问题
- c - cs50 的 copy.c 文件如何真正找到位图文件的正确部分?
- css - SVG 图标不适合父容器
- javascript - 函数返回中的 Firestore 查询
- android - 从毕加索加载图像时文本消失 - Android
- django - Django REST throwing [Errno 54] Connection reset by peer and Bad Request
- node.js - 在数组数据中插入字符
- python - 为什么使用 copy() 时字符串和数组的处理方式不同?