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")));