休眠 Select 子查询

Hibernate Select SubQuery

我有以下 hql 查询:

JgrelhasListBack = session.createQuery("from Jgrelhas where jtabuleiros.id=? and id<? order by id desc").setParameter(0, tabuleiroId).setParameter(1, grelhaId).setMaxResults(limitenovo).list();

我需要获得最后 5 个结果,所以我所做的是按 desc 排序并获得最大结果 5。但我需要按 Asc 排序...

我找到了一个解决方案,可以这样查询:

SELECT * FROM (
    SELECT * FROM table ORDER BY id DESC LIMIT 50
) sub
ORDER BY id ASC

我试图在 hql 中复制它,但没有成功:

JgrelhasListBack = session.createQuery("select (select Jgrelhas from Jgrelhas where jtabuleiros.id=? and id<? order by id desc ) from Jgrelhas order by id asc").setParameter(0, tabuleiroId).setParameter(1, grelhaId).setMaxResults(limitenovo).list();

提前致谢

不能在 HQL 中使用 from 子句进行子查询。它仅在 select/where 子句中受支持。

或者通过本机 SQL 查询尝试

(OR) 转换为 where 子句如下。

select Jgrelhas from Jgrelhas
where id IN   
(select id from Jgrelhas
where jtabuleiros.id=? and id<? order by id desc )
order by id asc

最简单的方法是反转 desc 有序列表:

List jgrelhasListBack = session.createQuery("from Jgrelhas where jtabuleiros.id=? and id<? order by id desc")
    .setParameter(0, tabuleiroId)
    .setParameter(1, grelhaId)
    .setMaxResults(limitenovo)
    .list();
return java.util.Collections.reverse(jgrelhasListBack);