2015-09-04 174 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