2012-11-15 31 views
11

我想知道是否有可能建立这样的查询,如:标准生成器来创建新的对象在Select语句

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

我不知道答案,个人,但是你给它一个镜头? –

回答

19

是的,Criteria API确实具有类似于JPQL构造函数表达式的构造。在CriteriaBuilder中通过construct方法设置Resuls类。表示为条件查询

你的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"))); 
+3

好,这正是我想要的!但是现在我有另外一个问题。我使用Spring Data和Specification来创建查询。从你的例子中我看到,我必须调用** q.select **,但在规范选择语句自动调用(bcs你只是返回谓词)。我有机会使用规范界面来做到这一点吗?或者我必须创建我自己的存储库,调用EntityManage并创建查询.... – user1827052