Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate:如何使用Criteria接口检索最后N个条目?_Java_Database_Hibernate_Hibernate Criteria - Fatal编程技术网

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

Java Hibernate:如何使用Criteria接口检索最后N个条目?,java,database,hibernate,hibernate-criteria,Java,Database,Hibernate,Hibernate Criteria,如何从数据库中检索最后N个条目 使用Hibernate标准接口 Criteria crit = hiberSession.createCriteria(UserTable.class); 或者甚至最好检索随机N个条目…最后一个条目始终取决于的顺序。因此,我们应该首先对列表进行排序,以确定最后一个是什么。然后按相反的顺序(如desc)将第一个移动到顶部 标准添加顺序(顺序描述(“名称”)) 一旦定义了顺序,我们就可以使用分页 如果需要指定结果集的边界,即要检索的最大行数和/或要检索的

如何从数据库中检索最后N个条目 使用Hibernate标准接口

Criteria crit = hiberSession.createCriteria(UserTable.class);
或者甚至最好检索随机N个条目…

最后一个条目始终取决于
的顺序。因此,我们应该首先对列表进行排序,以确定最后一个是什么。然后按相反的顺序(如desc)将第一个移动到顶部

  • 标准添加顺序(顺序描述(“名称”))

一旦定义了顺序,我们就可以使用分页

如果需要指定结果集的边界,即要检索的最大行数和/或要检索的第一行,可以使用查询接口的方法:

在这种情况下,我们会有类似的结果

...
crit.setFirstResult(20);
crit.setMaxResults(10);
...

您必须获取总计数,然后获取最后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();
Criteria count=session.createCriteria(UserTable.class);
set投影(Projections.rowCount());
长总计=count.uniqueResult();
int n;
条件=session.createCriteria(UserTable.class);
标准:setFirstResult(总n);
标准。setMaxResults(n);
List=criteria.List();
如果维护条目时间戳,则可以添加订单并获取最后n个结果

    Criteria criteria = session.createCriteria(UserTable.class);
    criteria.addOrder(Order.desc("timestamp"));
    criteria.setMaxResults(n);

    List<UserTable> list = criteria.list();
Criteria=session.createCriteria(UserTable.class);
标准.addOrder(Order.desc(“时间戳”));
标准。setMaxResults(n);
List=criteria.List();

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

哪种方法更有效?@devesh ahuja,如果您在
时间戳
列上有索引,则第二种方法肯定会更快。要想清楚,只有在对记录进行排序时,
last N records
才有意义。否则,您将根据数据库的自然顺序获得记录。感谢您的解释。我也尝试并观察到了同样的行为。它以混乱的顺序检索(不是按id排序)
    Criteria criteria = session.createCriteria(UserTable.class);
    criteria.addOrder(Order.desc("timestamp"));
    criteria.setMaxResults(n);

    List<UserTable> list = criteria.list();