休眠 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);
我有以下 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);