検索処理

この記事の所要時間: 約3分

EntityManager の取得

以下のようなコードで EntityManager を取得して使用する。

エンティティクラスの定義は以下の通り。

主キー検索

下記の例では、SampleTableの主キーが「aaa」のレコードを1件取得する。

JPQL(createQuery)

下記の例では、SampleTableの全件をsampleIdの昇順で取得する。

注意点

DB上のテーブルは「sample_table」、列名は「sample_id」だが、JPQLに記述するのは、Java側のエンティティクラスで定義したクラス名やフィールド(getterメソッド)名である。

取得列の指定時

列指定を行った場合、エンティティクラスの型では受け取れず、1レコードがObject配列となったリストで受け取ることになる。

動的条件

パラメータを「?1」「?2」のように「?番号順」につけていくパターン。Query#setParameter(番号, 値)でパラメータをセット。

パラメータの名前を「:パラメータ名」で指定するパターン。Query#setParameter(パラメータ名, 値)でパラメータをセット。

JPQL(createNamedQuery)

エンティティクラスに、以下を追記する。

そして以下を実行。下記の例では、SampleTableの全件をsampleIdの降順で取得する。

<

pre class=”lang:java decode:true “”>List<SampleTable> list =
em.createNamedQuery(“query2”)
.getResultList();

その他、基本的にはcreateQueryと一緒。

※Eclipseでエンティティクラスの自動生成ができることを考えると、エンティティクラスを手書きでいじる必要のあるcreateNamedQueryはなるべく使いたくないかもしれない。

Criteria

くらいてりあ。タイプセーフなのがウリとか。詳しくは知らないのでそのうち調べて追記できたらいいな。