问题
I was wondering if it's possible to create such query like :
em.createQuery(
"SELECT NEW EmpMenu(p.name, p.department.name) "
+ "FROM Project p ").getResultList();
also is it possible to do it via Specification:
public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query,
CriteriaBuilder cb) {
return ???;
}
Thanks in advance!
回答1:
Yes, Criteria API does have have construct similar to JPQL constructor expressions. Result class is set via construct method in CriteriaBuilder.
Your JPQL query expressed as an criteria query is:
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")));
来源:https://stackoverflow.com/questions/13400412/criteria-builder-create-new-object-in-select-statement