Hibernate:如何使用Criteria Interface检索最后N个条目?

时间:2014-09-10 08:02:47

标签: java database hibernate hibernate-criteria

如何从数据库中检索最后N个条目 使用Hibernate Criteria Interface?

Criteria crit = hiberSession.createCriteria(UserTable.class);

甚至可以更好地检索随机N个条目......

2 个答案:

答案 0 :(得分:1)

Last 始终取决于ORDER BY。所以我们首先要对列表进行排序,以确定最后一个是什么。然后反转顺序(例如desc)将第一个移到顶部

定义订单后,我们可以使用分页

  

如果需要在结果集上指定边界,即要检索的最大行数和/或要检索的第一行,可以使用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();

要获取任何随机条目,请将您的第一个结果设置为任意随机值,该值必须小于总计数。