Criteria Builder Создать новый объект в операторе выбора

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

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. Класс Resuls устанавливается методом конструирования в 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")));
Другие вопросы по тегам