EntityManager の取得
以下のようなコードで EntityManager を取得して使用する。
| 1 2 3 4 5 6 7 8 9 | EntityManagerFactory emf; try {   // persistence.xml の   // persistence-unit name="名称" の名称を引数にする   emf = Persistence.createEntityManagerFactory("名称"); } catch (Exception e) {   throw new ExceptionInInitializerError(e); } EntityManager em = emf.createEntityManager(); | 
エンティティクラスの定義は以下の通り。
| 1 2 3 4 5 6 7 | @Entity @Table(name = "sample_table") public class SampleTable {   @Id   @Column(name="sample_id", unique=true, nullable=false)   private int sampleId;   … | 
主キー検索
下記の例では、SampleTableの主キーが「aaa」のレコードを1件取得する。
| 1 | SampleTable sampleTable = em.find(SampleTable.class, "aaa"); | 
JPQL(createQuery)
下記の例では、SampleTableの全件をsampleIdの昇順で取得する。
| 1 2 3 | List<SampleTable> list =   em.createQuery("select s from SampleTable s order by s.sampleId")     .getResultList(); | 
注意点
DB上のテーブルは「sample_table」、列名は「sample_id」だが、JPQLに記述するのは、Java側のエンティティクラスで定義したクラス名やフィールド(getterメソッド)名である。
取得列の指定時
列指定を行った場合、エンティティクラスの型では受け取れず、1レコードがObject配列となったリストで受け取ることになる。
| 1 2 3 | List<Object[]> list =   em.createQuery("select s.sampleId from SampleTable s" +)     .getResultList(); | 
動的条件
パラメータを「?1」「?2」のように「?番号順」につけていくパターン。Query#setParameter(番号, 値)でパラメータをセット。
| 1 2 3 4 5 | List<SampleTable> list =   em.createQuery("select s from SampleTable s " +                  " where s.sampleId = ?1")     .setParameter(1, "aaa")     .getResultList(); | 
パラメータの名前を「:パラメータ名」で指定するパターン。Query#setParameter(パラメータ名, 値)でパラメータをセット。
| 1 2 3 4 5 | List<SampleTable> list =   em.createQuery(" select s from SampleTable s "                   " where s.sampleId = :sampleid")     .setParameter("sampleid", "aaa")     .getResultList(); | 
JPQL(createNamedQuery)
エンティティクラスに、以下を追記する。
| 1 2 3 4 5 6 7 8 9 10 11 | @Entity @Table(name = "sample_table") @NamedQueries({   @NamedQuery(     name="query1",     query="select s from SampleTable s order by s.sampleId"),   @NamedQuery(     name="query2",     query="select s from SampleTable s order by s.sampleId desc") }) public class SampleTable { | 
そして以下を実行。下記の例では、SampleTableの全件をsampleIdの降順で取得する。
<
pre class=”lang:java decode:true “”>List<SampleTable> list =
 em.createNamedQuery(“query2”)
 .getResultList();
その他、基本的にはcreateQueryと一緒。
※Eclipseでエンティティクラスの自動生成ができることを考えると、エンティティクラスを手書きでいじる必要のあるcreateNamedQueryはなるべく使いたくないかもしれない。
Criteria
くらいてりあ。タイプセーフなのがウリとか。詳しくは知らないのでそのうち調べて追記できたらいいな。
