Criteria Builder在Select语句中创建新对象

时间:2012-11-15 15:13:44

标签: java hibernate jpa-2.0 jpql criteria-api

我想知道是否可以创建这样的查询:

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

提前致谢!

1 个答案:

答案 0 :(得分:27)

是的,Criteria API确实具有类似于JPQL构造函数表达式的构造。结果类是通过CriteriaBuilder中的construct方法设置的。

表示为条件查询的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")));