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

JPQLとQueryアノテーション (2/5)

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

■NamedQueryアノテーション

JPQLは、createQueryの引数に指定して使うばかりではありません。まったく違った利用にの仕方もあるのです。それは、「NamedQuery」というアノテーションを使った方法です。

NamedQueryアノテーションは、エンティティクラスに用意するものです。エンティティクラス内に、クエリーの内容を設定したアノテーションを用意しておくことで、名前だけで指定のクエリーを実行できるようにします。

このNamedQueryアノテーションは以下のように記述します。これはエンティティクラスの前(@Entityアノテーションの前あたり)に記述します。
@NamedQuery(
    name="名前",
    query="……実行するクエリー"
)

アノテーションの引数には、namequeryを用意します。これにより、nameの名前を指定して、queryのクエリーを実行できるようになります。
Query 変数 = manager.createNamedQuery( 名前 );

EntityManagerクラスの「createNamedQuery」メソッドを使います。引数には、利用するNamedQueryの名前(nameで指定した値)を用意してやります。これにより、そのNamedQueryに用意されたqueryのクエリーを実行するためのQueryインスタンスが作成されます。

では、簡単なサンプルを下に挙げておきましょう。MyDataEntity@NamedQueryアノテーションを追加し、サーブレットのdoGetからそれを利用する例です。queryに用意された、
select d from MyDataEntity d order by d.name

このクエリー文が実行され、nameでソートして表示されているのが確認できるでしょう。

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

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

●プログラム・リスト●

// ※MyDataEntityに追記
import javax.persistence.NamedQuery;

@NamedQuery(
    name="findAllEntityOrderByName",
    query="select d from MyDataEntity d order by d.name"
)

// ※サーブレットに追記
@Override
protected void doGet(HttpServletRequest request,
        HttpServletResponse response)
        throws ServletException, IOException {
    EntityManager manager = factory.createEntityManager();
    Query query = manager.createNamedQuery("findAllEntityOrderByName");
    List list = query.getResultList();
    request.setAttribute("list", list);
    RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp");
    dispatcher.forward(request,response);
}

※関連コンテンツ

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