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

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

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

■複数のNamedQueryを用意する

NamedQueryによるクエリー設定は、1つしか用意できないわけではありません。複数のNamedQueryを用意することもできます。

これには、「NamedQueries」というアノテーションを使います。このアノテーションは、複数のNamedQueryを1つにまとめるためのものです。
@NamedQueries({
    @NamedQuery(……略……),
    @NamedQuery(……略……),
    ……略……
})

NamedQueriesの引数には、{}の中に@NamedQueryをカンマで区切って記述していきます。こうすることで、複数の@NamedQueryを用意することが可能です。この@NamedQueryの部分は、@NamedQuery単体で利用する場合とまったく同じです。プレースホルダなどの利用もまったく同様に扱えます。

実際の利用例を下に掲載しておきましょう。ここでは3つの@NamedQueryを用意してあります。これらは、それぞれ以下のような感じに利用することができます。
manager.createNamedQuery("findAllEntity");
manager.createNamedQuery("findEntityIdIs").setParameter("id", 1);
manager.createNamedQuery("findEntityNameLike").setParameter("find","taro");

よく利用する検索クエリーをこのように@NamedQueryとしてまとめておけば、名前とパラメータを用意するだけで簡単に実行できるようになります。

毎回、createQueryでクエリー文を記述して使う場合、何度もクエリーを書かなければいけません。が、@NamedQueryを使えば、あらかじめエンティティクラスに@NamedQueryを定義しておけば、後はクエリーを目にすることはありません。データベースアクセスの処理もだいぶすっきりとしますね!

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

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

●プログラム・リスト●

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

@NamedQueries({
    @NamedQuery(
        name="findAllEntity",
        query="select d from MyDataEntity d"
    ),
    @NamedQuery(
        name="findEntityIdIs",
        query="select d from MyDataEntity d where d.id = :id"
    ),
    @NamedQuery(
        name="findEntityNameLike",
        query="select d from MyDataEntity d where d.name like :find"
    ),
})
※関連コンテンツ

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