2015-09-04 172 views
1

我有以下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个结果所以我所做的就是为了这说明,并得到最大的结果5.但我需要它下令升序。 ..

我发现了一个解决方案,是使查询这样:

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

在此先感谢

回答

1

最简单的方法是扭转降序排序列表:

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); 
+0

非常感谢您!我不知道我可以扭转整个集合那样:) – Kunal

1

你不能做的子查询与子句中HQL。它仅在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