Spring 09
・メソッドチェーン
メソッドの呼び出しを連続して記述する手法です。
例:
entityManager.createQuery(qstr).setParameter("fid", fid)
.setParameter("fname", "%" + fstr + "%").setParameter("fmail", fstr + "@%")
@NamedQuery
クエリー文に名前を付けてエンティティクラスに用意しておきます。
@NamedQueries
複数のクエリー文を作りたい時、このアノテーションを使って全てをまとめることができます。
・Criteria APIによる検索
1.CriteriaBuilderの取得
CriteriaBuilderインスタンスの用意です。
CriteriaBuilder builder=《EntityManager》.getCriteriaBuilder();
2.CriteriaQueryの作成
特定のエンティティにアクセスするには、そのエンティティのclassプロパティを引数に指定します。
CriteriaQuery<エンティティ> 変数 = 《CriteriaBuilder》.createQuery(エンティティ.class);
3.Rootの取得
CriteriaBuilderのformメソッドでRootを取得します。引数には、検索するエンティティのClassを指定します。
Root<エンティティ> 変数 = 《CriteriaBuilder》.from(エンティティ.class);
4.createQueryして結果を取得
createQueryでQueryを生成し、getResultListで結果のListを取得します。
List<エンティティ> 変数 = (List<エンティティ>)《EntityManager》.createQuery(《CriteriaBuilder》).getResultList();
全要素の検索
@Override
public List<MyData> getAll() {
List<MyData> list = null;
CriteriaBuilder builder =
entityManager.getCriteriaBuilder();
CriteriaQuery<MyData> query =
builder.createQuery(MyData.class);
Root<MyData> root = query.from(MyData.class);
query.select(root);
list = (List<MyData>)entityManager
.createQuery(query)
.getResultList();
return list;
}
名前の検索
@Override
public List<MyData> find(String fstr){
CriteriaBuilder builder =
entityManager.getCriteriaBuilder();
CriteriaQuery<MyData> query =
builder.createQuery(MyData.class);
Root<MyData> root =
query.from(MyData.class);
query.select(root)
.where(builder.equal(root.get("name"), fstr));
List<MyData> list = null;
list = (List<MyData>) entityManager
.createQuery(query)
.getResultList();
return list;
}
CriteriaBuilder
CriteriaQueryのオブジェクトを作成します。
CriteriaQuery
クエリーに指定したアイテムを返します。
以前に指定された選択がある場合は、置き換えます。
Root
ルートに対応するメタモデルエンティティを返します。
昇順のorderを得ます
《CriteriaBuilder》.asc(《Expression》);
降順のorderを得ます
《CriteriaBuilder》.desc(《Expression》);
指定の位置から取得します。
Query 変数 =《Query》.setFirstResult(《int》)
指定の個数を取得します。
Query 変数 =《Query》.setMaxResult(《int》)
・エンティティの連携
@OneToMany
1つのエンティティに対して、もう一方のエンティティの複数が対応します。
@ManyToOne
複数のエンティティに対して、もう一方のエンティティの1つだけが対応します。
@ManyToMany
複数のエンティティに対して、他方の複数のエンティティが対応する関係です。