8.16.3 クエリ結果件数の範囲指定
複数件あるクエリ結果の中から任意に指定した件数だけを取得したり,開始位置で指定したクエリ結果だけを取得したりすることができます。これらの情報を取得するには,Queryインタフェースのメソッドを使用します。メソッドについて次に説明します。
(1) setMaxResultsメソッド
複数件あるクエリ結果の中から任意に指定した件数だけを取得するにはQueryインタフェースのsetMaxResultsメソッドを使用します。setMaxResultsメソッドの記述形式を次に示します。
Query setMaxResults(int検索結果の最大数)
メソッドの引数には,検索結果の最大数を指定します。
(2) setFirstResultメソッド
開始位置で指定したクエリ結果だけを取得するにはsetFirstResultメソッドを使用します。setFirstResultメソッドの記述形式を次に示します。
Query setFirstResult(int検索結果の開始位置)
メソッドの引数に検索結果の開始位置を指定します。なお,開始位置は0から始まる数値を指定してください。
(3) Queryインタフェースのメソッドの使用例
setMaxResultsメソッドおよびsetFirstResultメソッドの使用例を示します。この例では,従業員データ(Employee)から,月給(e.monthlySalary)の多い順に10番目から5人分のEmployeeオブジェクトを取得します。
Query query = em.createQuery( "SELECT e FROM Employee AS e " + "ORDER BY e.monthlySalary DESC" ) .setFirstResult(9) .setMaxResults(5); List resultList = query.getResultList();
(4) 注意事項
setFirstResultメソッドを使用して開始位置を指定した場合,引数に指定した値によって,getResultListメソッドおよびgetSingleResultメソッドを呼び出してから結果の値を取得するまでの時間が変わります。通常,引数に指定した開始位置の値に比例して,結果の値が戻ってくるまでの時間が掛かります。