JPQLとQueryアノテーション (2/5)
作成:2017-10-28 09:45
更新:2017-10-28 09:45
更新:2017-10-28 09:45
■NamedQueryアノテーション
JPQLは、createQueryの引数に指定して使うばかりではありません。まったく違った利用にの仕方もあるのです。それは、「NamedQuery」というアノテーションを使った方法です。
NamedQueryアノテーションは、エンティティクラスに用意するものです。エンティティクラス内に、クエリーの内容を設定したアノテーションを用意しておくことで、名前だけで指定のクエリーを実行できるようにします。
このNamedQueryアノテーションは以下のように記述します。これはエンティティクラスの前(@Entityアノテーションの前あたり)に記述します。
アノテーションの引数には、nameとqueryを用意します。これにより、nameの名前を指定して、queryのクエリーを実行できるようになります。
EntityManagerクラスの「createNamedQuery」メソッドを使います。引数には、利用するNamedQueryの名前(nameで指定した値)を用意してやります。これにより、そのNamedQueryに用意されたqueryのクエリーを実行するためのQueryインスタンスが作成されます。
では、簡単なサンプルを下に挙げておきましょう。MyDataEntityに@NamedQueryアノテーションを追加し、サーブレットのdoGetからそれを利用する例です。queryに用意された、
このクエリー文が実行され、nameでソートして表示されているのが確認できるでしょう。
NamedQueryアノテーションは、エンティティクラスに用意するものです。エンティティクラス内に、クエリーの内容を設定したアノテーションを用意しておくことで、名前だけで指定のクエリーを実行できるようにします。
このNamedQueryアノテーションは以下のように記述します。これはエンティティクラスの前(@Entityアノテーションの前あたり)に記述します。
@NamedQuery(
name="名前",
query="……実行するクエリー"
)
アノテーションの引数には、nameとqueryを用意します。これにより、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でソートして表示されているのが確認できるでしょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
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入門」に戻る