如何从数据库中检索最后N个条目 使用Hibernate Criteria Interface?
Criteria crit = hiberSession.createCriteria(UserTable.class);
甚至可以更好地检索随机N个条目......
答案 0 :(得分:1)
Last 始终取决于ORDER BY
。所以我们首先要对列表进行排序,以确定最后一个是什么。然后反转顺序(例如desc)将第一个移到顶部
crit.addOrder(Order.desc(" name"))
定义订单后,我们可以使用分页
如果需要在结果集上指定边界,即要检索的最大行数和/或要检索的第一行,可以使用Query接口的方法:
Query q = sess.createQuery("from DomesticCat cat");
q.setFirstResult(20);
q.setMaxResults(10);
List cats = q.list();
在这种情况下,我们会有类似的
...
crit.setFirstResult(20);
crit.setMaxResults(10);
...
答案 1 :(得分:1)
您必须获取总计数,然后获取最后N个记录。
Criteria count = session.createCriteria(UserTable.class);
count.setProjection(Projections.rowCount());
Long total = count.uniqueResult();
int n;
Criteria criteria = session.createCriteria(UserTable.class);
criteria.setFirstResult(total-n);
criteria.setMaxResults(n);
List<UserTable> list = criteria.list();
如果您保留输入时间戳,则可以添加顺序并获取最后n个结果
Criteria criteria = session.createCriteria(UserTable.class);
criteria.addOrder(Order.desc("timestamp"));
criteria.setMaxResults(n);
List<UserTable> list = criteria.list();
要获取任何随机条目,请将您的第一个结果设置为任意随机值,该值必须小于总计数。