条件生成器 在 Select 语句中创建新对象

2022-09-02 09:16:58

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

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

是的,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")));

答案 2

推荐