2010-05-26 4 views
7

저는 ORM에 익숙하지 않아 뭔가 이해하는데 도움이 필요합니다.JPA 및 집계 함수 쿼리 결과를 어떻게 사용합니까?

의 나는 다음과 같은 표준 SQL 쿼리가 있다고 가정하자 : 나는 JPA에서 사용할

SELECT *, COUNT(test.testId) AS noTests FROM inspection 
LEFT JOIN test ON inspection.inspId = test.inspId 
GROUP BY inspection.inspId 

.

테스트 엔티티와 일대 다 관계가있는 검사 엔티티가 있습니다.

Query query = em.createQuery("SELECT insp, COUNT(???what???) " + 
     "FROM Inspection insp LEFT JOIN insp.testList " + 
     "GROUP BY insp.inspId"); 

1) 어떻게 카운트 절을 작성하려면 어떻게해야합니까 : 나는 JPQL에이 글을 쓰는 노력 (검사는 많은 시험이있다)? 테스트 테이블의 요소에 count를 적용해야하지만 testList는 콜렉션이므로 아무 것도 할 수 없습니다. COUNT(insp.testList.testId)

2) 1이 해결되면 어떤 유형의 객체가 반환 될지 가정합니다. 그것은 확실히 검사 객체가 아닙니다 ... 결과를 어떻게 사용합니까?

답변

16
  1. 당신은 (AS)와 결합 된 개체에 대한 별칭
  2. 당신은 어느 새 개체를 만들거나

따라서 반환 된 값으로 List 수 있습니다 제공 할 수 있습니다 :

SELECT new com.yourproject.ResultHolder(insp, COUNT(test.testId)) 
    FROM Inspection insp LEFT JOIN insp.testList AS test GROUP BY insp.inspId 

또는

SELECT new list(insp, COUNT(test.testId)) 
    FROM Inspection insp LEFT JOIN insp.testList AS test GROUP BY insp.inspId 

결과는 ResultHolder의 인스턴스로 또는 insplist.get(0)java.util.List로 중 다음 액세스, 그리고 수는

+0

list.get(1) 대단히 감사합니다. 그것은 작동합니다! – Bogdan