2012-07-20 9 views
2

나는 계정이 여러 사용자가 할 수있는 데이터 모델이하위 쿼리

select Account.id, NumUsers.num from Account, 
     (select Account.id as account_id, count(User.id) as num 
     from User join Account on User.account_id=Account.id 
     group by Account.id) as NumUsers 
where Account.id=NumUsers.account_id; 

은 내가 아니라이 특정 쿼리를 다시 쓸 수 있습니다 알고

select Account.id, count(User.id) from Account join 
     User on User.account_id=Account.id group by Account.id 

을하지만 더 complic을 만들 계획 하나 이상의 그룹이 필요한 보고서에 대한 ated 쿼리 여러 그룹에 대한 올바른 접근 방법에 대해서는 here을 읽었습니다.

JPA2 Criteria API를 사용하여 쿼리를 만들려면 어떻게해야합니까?

답변

6

JPA 2 Criteria API에서 FROM 절에 하위 쿼리를 사용할 수 없습니다. JPQL과 같은 한계가 있습니다. JPA 2 사양에서 다음은 JPQL의 하위 쿼리에 대해 설명합니다.

하위 쿼리는 WHERE 또는 HAVING 절에서 사용될 수 있습니다.

그리고 무엇

이 기준 API의 하위 쿼리에 대해라고하는 같은 결론에 이르게 :

모두 상관 관계 제한 술어에 비 상관 서브 쿼리를 사용할 수 있습니다. 하위 쿼리는 하위 쿼리 개체를 만들고 수정하여 구성됩니다.

서브 쿼리 인스턴스는 조건부 표현에 사용하기 위해 CriteriaBuilder 인터페이스의 all, any 또는 일부 메소드에 인수로 전달할 수 있습니다.

조건부 조건자를 만들기 위해 Subquery 인스턴스를 CriteriaBuilder exists 메서드 에 전달할 수 있습니다.

+0

왜 이것이 JPQL의 제한 사항입니까? 주위에 방법이 있습니까? –

+0

말하기 어렵다. 디자인 한 사람에게 질문해야한다. 최소한 그것은 언어 구현을 쉽게합니다. 유일한 방법은 FROM 절에서 하위 쿼리없이 쿼리를 작성하는 것입니다. –