2014-09-15 2 views
2

I 출력이 같은 것 사용 사례에 대한 기준 쿼리를 구성해야 ..JPA 기준 쿼리 API 새로운

XXX의 X, YYY의 새로운 WrapperXXXYYY (XXX.something, YYY.something)를 선택 y, 어디 x.id = y.createdBy 및 ...

내가 만든 코드는 .. 여기에 도메인 클래스는 다른 두 엔티티 클래스의 단지 래퍼입니다. java.lang.IllegalArgumentException가 : org.hibernate.hql.internal.ast.QuerySyntaxException : 예기치 않은 토큰 : 새로운 근처 1 호선, 열 (62)

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

나는 아래의 예외 "에 javax.ejb.EJBException를 받고 있어요 "

및 생성 된 쿼리입니다 - [새 com.collabnet.ctf.server.report.jpa.JPAReportList (새 com.collabnet.ctf.server.report.jpa.JPAReportList (generatedAlias0.surrogateId, generatedAlias1을 선택합니다. projectId)) com.collabnet.ctf.server.user.jpa.JPAUser from generatedAlias0, com.collabnet.ctf.server.report.jpa.JPAReport as generatedAlias1]

domainClass에 대해 두 개의 "새로운"문이 표시됩니다. 문법이 잘못되었습니다. select()

criteriaQuery.select(builder.construct(domainClass, user.get("surrogateId"), report.get("projectId"))); 

또는

criteriaQuery.multiselect(user.get("surrogateId"), report.get("projectId")); 

사용 construct() 또는 multiselect()construct()없이 사용

답변

8

당신은 두 가지 방법 중 하나를 기준으로 생성자 식을 얻을 수 있습니다. 두 가지 방법을 혼합하여 중첩 된 생성자 식으로 끝냅니다.