当前位置: 首页 > 知识库问答 >
问题:

Hibernate:如何选择除最后N行之外的所有行?

丌官利
2023-03-14

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

session.createQuery("FROM Book 
WHERE id NOT IN(SELECT id FROM Book ORDER BY ID DESC LIMIT 5) 
ORDER BY title");

不幸的是,LIMITHibernate中不允许,所以我收到一个错误:

我怎样才能解决这个问题?

共有3个答案

朱保赫
2023-03-14

我还提出了类似的问题,涉及hibernate中“LIMIT”关键字的限制。

Hibernate:如何按id的升序选择最后N行?(在单个查询中)

我认为只有两种方法,尽管这不是最好的表现。

  1. 两个查询(获取id列表,然后使用不在id列表中的查询)
  2. 一个带有进一步数据处理的查询(例如,从结果列表中去掉最后5个数据)

希望有帮助

佘修为
2023-03-14

好像你在问Hibernate分页

首次获取计数:

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();

你可能需要更新查询,但我相信你会明白的

堵彬彬
2023-03-14

这里有一个答案

如何在HQL中进行限制查询?

在HQL中,限制从来都不是受支持的子句。您应该使用setMax结果()。

 类似资料:
  • 问题内容: 我想在名为 id的 列( 主键)中 从MySQL数据库中选择最后50行。目标是行应该被分类 ID 在 ASC 秩序,这就是为什么这个查询不工作 同样值得注意的是,可以对行进行操作(删除),这就是为什么以下查询也不起作用的原因 问题 :如何从MySQL数据库中检索可以操纵并按ASC顺序排列的最后N行? 问题答案: 您可以使用子查询来做到这一点: 这将从中选择 最后 50行,然后按升序对其

  • 问题内容: 我有一个带有索引(自动递增)和整数值的表。该表长百万行。 如何搜索某个数字是否最有效地出现在表的最后n行中? 问题答案: 从@chaos给出的答案开始,但进行了一些修改: 如果使用,则应始终使用。对于RDBMS表,没有保证的隐式顺序。 通常, 您可能 会 按主键的顺序获得行,但是您不能依靠它,也不是可移植的。 如果按降序排列,则无需事先知道表中的行数。 您必须为派生表指定一个 相关名称

  • 我想从MySQL数据库中选择最后50行,列名为id,这是主键。目标是行应该按照ASC顺序按id排序,这就是为什么这个查询不起作用 同样值得注意的是,行可以被操纵(删除),这就是为什么下面的查询也不起作用 问题:如何从MySQL数据库中检索最后N行,这些行可以被操作并按ASC顺序排列?

  • 我有大量数据,需要清理。B列为关键列;如果B列中有空值,则可以删除该行的其余部分。 我在B列上排序,所有的空值都在表的底部。在C-BZ列中有数据,但在B中没有。我想自动识别B中最后一个非空值(假设它是单元格B3841),然后删除工作表底部的3842行。我的数据集每天都在变化。 下面的代码对B列进行排序,然后删除所有完全空的行。我还想删除在B列中为null但在C或D或任何其他行中可能有数据的行。

  • 问题内容: 如何使用CSS3选择器选择除最后一个子项之外的所有子项? 例如,只得到最后一个孩子第N个子项(1) 是的。。 问题答案: 您可以使用否定伪类:not()对:last-child伪类。正在被引入CSS选择器3级,它不适用于IE8或更低版本:

  • 问题内容: 是否可以构建单个mysql查询(不带变量)以从表中删除所有记录,但最新的N(按ID desc排序)除外? 像这样的东西,只有它不起作用:) 谢谢。 问题答案: 您不能以这种方式删除记录,主要问题是您不能使用子查询来指定LIMIT子句的值。 这有效(在MySQL 5.0.67中测试): 中间子查询 是 必需的。没有它,我们将遇到两个错误: SQL错误(1093):您无法在FROM子句中指