2012-11-15 7 views
11

それはのようなクエリを作成することができます場合、私は思っていた:基準ビルダーSELECT文で新しいオブジェクトを作成

em.createQuery(
     "SELECT NEW EmpMenu(p.name, p.department.name) " 
      + "FROM Project p ").getResultList(); 

も仕様経由でそれを行うことが可能です:事前に

public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, 
     CriteriaBuilder cb) { 


    return ???; 
} 

感謝を!

+0

私は個人的に、答えを知りませんが、あなたはそれに打撃を与えました:基準クエリとして表現

あなたのJPQLクエリはありますか? –

答えて

19

はい、Criteria APIには、JPQLコンストラクタの式に似た構文があります。 Resulsクラスは、CriteriaBuilderのconstructメソッドによって設定されます。

CriteriaBuilder cb... 
CriteriaQuery<EmpMenu> q = cb.createQuery(EmpMenu.class); 
    Root<Project> c = q.from(Project.class); 
    q.select(cb.construct(EmpMenu.class, 
     c.get("name"), c.get("department").get("name"))); 
+3

これはまさに私が欲しかったものです!しかし、今私は別の質問があります。私は、Spring Data and Specificationを使用してクエリを作成します。あなたの例から、私は** q.select **を呼び出さなければならないことがわかりますが、仕様のselect文は自動的に呼び出されます(bcsを使うと、述語を返すだけです)。仕様インタフェースを使用してそれを行う機会がありますか?または自分のリポジトリを作成し、EntityManageを呼び出してクエリを作成する必要があります.... – user1827052

関連する問題