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子句中出现,而limit不能在hibernate中使用。
在hibernate中怎么做?
Update - To make clear
例如,从id=1到id=10有10个数据条目。
我想通过查询 + ,以升序选择id的最后3个数据,而不需要进一步的数据处理。
从db得到的结果是id=8到id=10
谢谢。
假设您有1
到10
的id,并且您想要最后一个N=3
。
采取你的方法
SELECT * FROM tickets ORDER BY id DESC
将按照从10
到1
的顺序返回id。然后,您希望以升序获得最后一个N=3
。这意味着您需要将id 3
到1
按升序排列。
按升序选择第一个N
id会有什么问题?
session.createQuery(
"FROM tickets ORDER BY id ASC"
).setMaxResults(n);
可以使用Query setFirstResult(int startPosition)
, Query setMaxResults(int maxResult)
来实现。通常用于分页。
机会主义,你可以在这里得到前3条记录,所以你只能使用Query setMaxResults(int maxResult)
.