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 回答