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

时间:2016-10-18 04:16:38

标签: java hibernate hql hibernate-5.x

Hibernate版本:5.2

我正在尝试使用子查询,并使用setMaxResults(int)。

session.createQuery(
"FROM ( SELECT * FROM tickets ORDER BY id DESC limit 3) sub ORDER BY id ASC"
);

但是,HQL子查询只能出现在select或where子句中,并且限制不能用于休眠。

我如何在休眠状态下执行此操作?

更新 - 明确

例如,从id = 1到id = 10有10个数据条目。

我想按ID的升序选择最后3个数据仅一个查询 + ,无需进一步处理数据

db的结果是id = 8到id = 10

谢谢。

2 个答案:

答案 0 :(得分:0)

假设您有110,并且您想要最后一个N=3

采取你的方法

SELECT * FROM tickets ORDER BY id DESC

会按照从101的顺序返回ID。然后,您希望以升序排列最后N=3。这意味着您希望ID 3升级为1

按升序选择第一个N ID会出现什么问题?

session.createQuery(
    "FROM tickets ORDER BY id ASC"
).setMaxResults(n);

答案 1 :(得分:0)

您可以使用Query setFirstResult(int startPosition)Query setMaxResults(int maxResult)来实施它。通常用于分页。

机会主义,你可以在这里降序获得前3个记录,因此你只能使用Query setMaxResults(int maxResult)