Hibernate选择SubQuery

时间:2015-09-04 13:54:53

标签: mysql hibernate jboss hql

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

提前致谢

2 个答案:

答案 0 :(得分:1)

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

尝试使用本机SQL查询

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

\\$

答案 1 :(得分:1)

最简单的方法是反转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);