user1827052
user1827052

Reputation: 267

Criteria Builder Create new Object In Select Statement

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!

Upvotes: 22

Views: 24693

Answers (1)

Mikko Maunu
Mikko Maunu

Reputation: 42114

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

Upvotes: 42

Related Questions