JPQLにおけるサブクエリーの定義は次の通りです。見ての通り、ORDER BYは使えません。
subquery ::= simple_select_clause subquery_from_clause [where_clause] [groupby_clause] [having_clause]
でも、LIMITと組み合わせてトップ10とかを抽出したい場合はどうするんだろう。HAVINGを使うのかな。
と思ってググったら見つかりました。
SQLで先頭から上位10件のレコードを取得する方法(Oracle、SQL Server、MySQL、PostgreSQL)
SELECT DISTINCT COUNT(*), A.Field1, A.Field2, A.Field3 FROM Table1 A, Table1 B WHERE (A.Field1 >= B.Field1) GROUP BY A.Field1, A.Field2, A.Field3 HAVING COUNT(*) <= 10;
(一部抜粋)
自己結合を使ってWHERE句でソートするのか。かっけー。