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
複数のエンティティに対して、他方の複数のエンティティが対応する関係です。