Создатель критериев Создать новый объект в Select Statement

Мне было интересно, можно ли создать такой запрос, например:

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

Да, API Criteria имеет конструкцию, похожую на выражения конструктора 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")));