4

特定の列の最大値を持つレコードを選択しようとしています。これまでのところ、次のようになっています。

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を示唆しているようです...)

4

1 に答える 1

9

いいえ、HQLを使用して上記のSQLクエリを生成することはできません。ドキュメントには次のように書かれています。

HQLサブクエリは、select句またはwhere句でのみ発生する可能性があることに注意してください。

于 2012-05-10T05:45:51.763 に答える