libro
www.tuyano.com
初心者のためのJava Persistence API入門

Criteria APIの利用 (6/6)

作成:2017-10-28 10:14
更新:2017-10-28 10:14

■位置のオフセットと取得サイズ

JPAのQueryは、最終的にsetResultListで全エンティティをListにまとめて取得します。が、その中から特定のものだけを抜き出したい場合もあります。このようなときのために、「○○番目から取得する」「○○個だけ取得する」といった働きをするメソッドも用意されています。

・取得する位置を設定する
[Query].setFirstResult( 整数 )
レコードがずらっと並んでいたとき、「最初から何番目のものから取り出すか」を設定するものです。引数値は整数(int値)で指定します。一番最初はゼロであり、1ならば2番めから、2ならば3番目から……という具合に取得します。

・取得する個数を設定する
[Query].setMaxResults( 整数 )
取り出すレコード数を指定するものです。引数はint値です。5ならば、最大5個を取り出します。「最大」というのは、例えば得られるレコード数がそれより少ない場合もあるためです。

この2つのメソッドは、連続してメソッドチェーンとして記述することが多いでしょう。「○○番目から○○個取り出す」という具合ですね。

では、利用例を以下に挙げておきましょう。これは、nとcという2つのパラメータを指定してアクセスをします。例えば、
http://localhost:8080/hello?n=1&c=2

このようにすると、2番目のレコードから2つだけ取り出します。ここでは、パラメータの値を使い、以下のようにQueryから値を取り出しています。
Query query = manager.createQuery(criteria_query);
query.setFirstResult(n).setMaxResults(c);
List list = query.getResultList();

ここまで説明したメソッド類と違い、setFirstResultsetMaxResultsは「Queryクラスのメソッド」である、という点に留意しましょう。ということは、実はこれらはCriteria APIの機能ではないんですね。ですから、createQueryQueryを作成した場合も使うことができるのです。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

// ※サーブレットに追記
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;

@Override
protected void doGet(HttpServletRequest request,
        HttpServletResponse response)
        throws ServletException, IOException {
    String n_str = request.getParameter("n");
    String c_str = request.getParameter("c");
    int n = 0;
    int c = 5;
    try {
        n = Integer.parseInt(n_str);
        c = Integer.parseInt(c_str);
    } catch(NumberFormatException e){
        e.printStackTrace();
    }
    EntityManager manager = factory.createEntityManager();
    CriteriaBuilder builder = manager.getCriteriaBuilder();
    CriteriaQuery<MyDataEntity> criteria_query =
            builder.createQuery(MyDataEntity.class);
    Root<MyDataEntity> root = criteria_query.from(MyDataEntity.class);
    criteria_query.select(root);
    Query query = manager.createQuery(criteria_query);
    query.setFirstResult(n).setMaxResults(c);
    List list = query.getResultList();
    request.setAttribute("list", list);
    RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp");
    dispatcher.forward(request,response);
}

※関連コンテンツ

「初心者のためのJava Persistence API入門」に戻る