2012-05-09 70 views
3

我试图选择具有特定列的最大值,这里的记录是我到目前为止有:JPQL选择记录与最高值

select o from Order o 
    where o.orderNumber = :orderNumber 
    and o.version = 
     (select max(o.version) from Order o where o.orderNumber = :orderNumber) 

这似乎是生成SQL:

SELECT * 
FROM Order 
WHERE ordernumber = :orderNumber 
     AND orderversion = (SELECT Max(orderversion) 
          FROM order 
          WHERE ordernumber = :orderNumber); 

我觉得下面的SQL效率会比较高:

SELECT * 
FROM order ord 
     INNER JOIN (SELECT ordernumber, 
          Max (version) AS version 
        FROM order 
        WHERE ordernumber = :ordernumber 
        GROUP BY ordernumber) mx 
     ON ord.ordernumber = mx.ordernumber 
      AND ord.version = mx.version; 

反正我可以表达这在JPQL中?

(大部分为与在特定领域具有最大值选择记录问题在线回答似乎表明我送了一上述JPQL ...)

+0

您正在使用哪个数据库引擎? – Jorge

+0

我使用Oracle和Hibernate作为我的JPA提供程序。 –

回答

7

不,这不可能产生上述SQL查询HQL。 The documentation说:

注意,HQL自查询只能出现在select或者where子句 。