Java 休眠:如何选择除最后N行以外的所有行?

Java 休眠:如何选择除最后N行以外的所有行?,java,mysql,hibernate,Java,Mysql,Hibernate,我正在尝试运行一个Hibernate查询,该查询返回除最后5行之外的所有行,因此我的sql查询如下所示: session.createQuery("FROM Book WHERE id NOT IN(SELECT id FROM Book ORDER BY ID DESC LIMIT 5) ORDER BY title"); 不幸的是,Hibernate中不允许此限制,因此我得到了一个错误消息: HTTP状态500-org.hibernate.hql.internal.ast.QueryS

我正在尝试运行一个Hibernate查询,该查询返回除最后5行之外的所有行,因此我的sql查询如下所示:

session.createQuery("FROM Book 
WHERE id NOT IN(SELECT id FROM Book ORDER BY ID DESC LIMIT 5) 
ORDER BY title");
不幸的是,Hibernate中不允许此限制,因此我得到了一个错误消息:

HTTP状态500-org.hibernate.hql.internal.ast.QuerySyntaxException: 意外标记:第1行第78列附近的限制[来自models.Book WHERE id未插入从模型中选择id。按id预订订单描述限制5订单 [按标题]


我如何解决这个问题?

这里有一个答案

Limit在HQL中从来都不是受支持的子句。您应该使用setMaxResults


这里有一个答案

Limit在HQL中从来都不是受支持的子句。您应该使用setMaxResults


好像你在问

首次获取计数:

String countQ = "Select count (f.id) from Foo f";
Query countQuery = session.createQuery(countQ);
Long countResults = (Long) countQuery.uniqueResult();
然后计算您的极限起点和终点:

Long start = countResult - limit;
然后在将来使用分页:

Session session = sessionFactory.openSession();
Query query = sess.createQuery("From Foo");
query.setFirstResult(start );
query.setMaxResults(limit);
List<Foo> fooList = fooList = query.list();

您可能需要更新查询,但我相信您已经明白了这一点

首次获取计数:

String countQ = "Select count (f.id) from Foo f";
Query countQuery = session.createQuery(countQ);
Long countResults = (Long) countQuery.uniqueResult();
然后计算您的极限起点和终点:

Long start = countResult - limit;
然后在将来使用分页:

Session session = sessionFactory.openSession();
Query query = sess.createQuery("From Foo");
query.setFirstResult(start );
query.setMaxResults(limit);
List<Foo> fooList = fooList = query.list();

您可能需要更新查询,但我相信您已经明白了

我也问过类似的问题,这些问题与hibernate中LIMIT关键字的限制有关

我认为只有两条路可以走,尽管这不是最好的表现

两个查询获取id列表,然后查询不在id列表中 一个查询需要进一步的数据处理,例如从结果列表中剔除最后5个数据
希望能有所帮助

我也问过类似的问题,这些问题与hibernate中LIMIT关键字的限制有关

我认为只有两条路可以走,尽管这不是最好的表现

两个查询获取id列表,然后查询不在id列表中 一个查询需要进一步的数据处理,例如从结果列表中剔除最后5个数据
希望它能有所帮助

我知道这一点,但我不能在我的案例中使用这种方法,除非我循环有限的结果,然后进行选择。我需要一些性能更好的方法:我知道这一点,但我不能在我的案例中使用这种方法,除非我循环有限的结果,然后进行选择。我需要做一些更好的事情:setFirstResult不接受Long,仅'in,此方法不返回正确的按id排序的顺序setFirstResult不接受Long,仅'in,此方法不返回正确的按id排序的顺序