JPQL选择具有最大值的记录

nem*_*emo 3 hibernate jpa hql jpql

我正在尝试选择具有特定列的最大值的记录,这是我到目前为止所拥有的:

select o from Order o 
    where o.orderNumber = :orderNumber
    and o.version =
        (select max(o.version) from Order o where o.orderNumber = :orderNumber)
Run Code Online (Sandbox Code Playgroud)

这似乎是生成SQL:

SELECT *
FROM   Order
WHERE  ordernumber = :orderNumber
       AND orderversion = (SELECT Max(orderversion)
                           FROM   order
                           WHERE  ordernumber = :orderNumber);
Run Code Online (Sandbox Code Playgroud)

我认为以下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; 
Run Code Online (Sandbox Code Playgroud)

无论如何我可以在JPQL中表达这个吗?

(对于在特定字段上选择具有最大值的记录相关的问题,大多数在线答案似乎表明我提出的上述JPQL ...)

JB *_*zet 7

不,用HQL生成上述SQL查询是不可能的.文件说:

请注意,HQL子查询只能出现在select或where子句中.