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")));
}
我有一个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")));
}