ページングされた結果を取得するために使用される次の SQL クエリを HQL に変換するのを手伝ってくれる人はいますか?
SELECT *
FROM REPORDER repairorde0x_
INNER JOIN REPREPAIRDEVICE repairdevi1x_
ON repairorde0x_.ID=repairdevi1x_.REPORDERID
WHERE repairorde0x_.ID IN
(SELECT id
FROM
(SELECT row_.id,
rownum rownum_
FROM
(SELECT DISTINCT repairorde0_.ID
FROM REPORDER repairorde0_
INNER JOIN REPREPAIRDEVICE repairdevi1_
ON repairorde0_.ID=repairdevi1_.REPORDERID
) row_
WHERE rownum <= 550
)
WHERE rownum_ > 500
) ;
HQL に変換できない部分は、取得する修理オーダーの ID を選択するサブセレクトです。この場合、rownum とそれに続くいくつかの sub-select ステートメントを処理する方法がわかりません。
Javaでメモリ内でページネーションを行うのではなく、DBレベルでページネーションを行うには、HQLクエリが必要です。(Query.setMaxResults、Query.setFirstResult JOIN FETCH HQL クエリの警告に関する問題: 「コレクション フェッチで指定された firstResult/maxResults; メモリに適用!」)
エンティティのJavaモデルについてヒントを与えるために:
class RepairOrder{
private int id;
private String orderNumber;
private List<RepairDevice> repairDevices;
}
class RepairDevice{
private int id;
private int repairOrderId;
private String deviceName;
}