use*_*613 2 sql jpa criteria criteria-api
我必须为一个用例构建一个Criteria Query,其输出就像..
从XXX x,YYY y中选择新的WrapperXXXYYY(XXX.something,YYY.something),其中x.id = y.createdBy和...
我创建的代码是..这里的域类只是其他两个Entity类的包装.
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<? extends T> criteriaQuery = builder.createQuery(domainClass);
Root<JPAUser> user = criteriaQuery.from(JPAUser.class);
Root<JPAReport> report = criteriaQuery.from(JPAReport.class);
criteriaQuery.multiselect(builder.construct(domainClass, user.get("surrogateId"), report.get("projectId")));
return em.createQuery(criteriaQuery);
Run Code Online (Sandbox Code Playgroud)
我得到以下异常"javax.ejb.EJBException:java.lang.IllegalArgumentException:org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:新近第1行,第62列"
生成的查询是 - [从com选择新的com.collabnet.ctf.server.report.jpa.JPAReportList(new com.collabnet.ctf.server.report.jpa.JPAReportList(generatedAlias0.surrogateId,generatedAlias1.projectId)). collabnet.ctf.server.user.jpa.JPAUser as generatedAlias0,com.collabnet.ctf.server.report.jpa.JPAReport as generatedAlias1]
我看到domainClass有两个"新"语句,语法出了什么问题?
您可以使用以下两种方法之一使用Criteria实现构造函数表达式:
criteriaQuery.select(builder.construct(domainClass, user.get("surrogateId"), report.get("projectId")));
Run Code Online (Sandbox Code Playgroud)
要么
criteriaQuery.multiselect(user.get("surrogateId"), report.get("projectId"));
Run Code Online (Sandbox Code Playgroud)
使用construct()有select()或使用multiselect() 无 construct().您已经混合了这两种方法,最终得到了嵌套的构造函数表达式.
| 归档时间: |
|
| 查看次数: |
1421 次 |
| 最近记录: |