Java 休眠:如何选择除最后N行以外的所有行?
我正在尝试运行一个Hibernate查询,该查询返回除最后5行之外的所有行,因此我的sql查询如下所示: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
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排序的顺序