20

次のようなクエリを作成できるかどうか疑問に思っていました:

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 ???;
}

前もって感謝します!

4

1 に答える 1

39

はい、Criteria API には JPQL コンストラクター式に似た構造があります。結果クラスは、CriteriaBuilder のコンストラクトメソッドを介して設定されます。

条件クエリとして表現された JPQL クエリは次のとおりです。

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")));
于 2012-11-15T18:55:27.157 に答える