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入門」に戻る