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

CRUDの基本 (3/5)

作成:2017-10-28 09:32
更新:2017-10-28 09:32

■ 特定のIDのエンティティを取得

もっと単純に「特定のIDのレコードをエンティティとして取得する」というだけなら、Queryを用意するような面倒な処理は必要ありません。もっとダイレクトなメソッドが用意されています。
Object 変数 = manager.find( [class] , 値 );

EntityManagerクラスの「find」メソッドは、プライマリキー(ID)の値を指定してエンティティを取り出します。第1引数にはエンティティマネージャのClassインスタンスを、第2引数にはIDの値をそれぞれ指定します。

簡単な利用例を挙げておきましょう。下のリスト欄に、サンプルプロジェクトのMyDataEntityServletサーブレットのdoGetメソッドでfindを使いエンティティを取り出す処理を挙げておきました。例えば、以下のようにアクセスをすると、ID = 2のMyDataEntityインスタンスが取り出されます。
http://localhost:8080/hello?id=2

この例では、取り出したエンティティをentityという名前でリクエストに保管し、index.jspにフォワードしています。JSP側では、このentityを取り出して必要な処理をすれば良いでしょう。たとえば、こんな具合です。
<% MyDataEntity entity = (MyDataEntity)request.getAttribute("entity"); %>
<%=entity.getId() %>
<%=entity.getName() %>
<%=entity.getMail() %>
<%=entity.getTel() %>

このサンプルでは、doGetメソッドでfindを使いエンティティを取り出しています。MyDataEntity.classを第1引数に、パラメータから取り出したIDの値を第2引数に指定しています。
MyDataEntity entity = manager.find(MyDataEntity.class, id);

これで、指定したIDののMyDataEntityインスタンスが得られます。これをリクエストに保管すれば、JSP側でそれを取り出して表示できるというわけです。

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

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

●プログラム・リスト●

@Override
protected void doGet(HttpServletRequest request,
        HttpServletResponse response)
        throws ServletException, IOException {
    String id_str = request.getParameter("id");
    int id = 0;
    try {
        id = Integer.parseInt(id_str);
    } catch(NumberFormatException e){
        e.printStackTrace();
    }
    EntityManager manager = factory.createEntityManager();
    MyDataEntity entity = manager.find(MyDataEntity.class, id);
    
    request.setAttribute("entity", entity);

    RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp");
    dispatcher.forward(request,response);
}
※関連コンテンツ

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