我想知道是否可以创建这样的查询:
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 ???;
}
提前致谢!
答案 0 :(得分:27)
是的,Criteria API确实具有类似于JPQL构造函数表达式的构造。结果类是通过CriteriaBuilder中的construct方法设置的。
表示为条件查询的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")));