2009-03-24 8 views
1

이전의 "클래식 ASP"응용 프로그램을 J2EE/Hibernate로 마이그레이션하는 중입니다. 나는 SQL 문 다음과 같은 유형의 문제를 가지고 :최대 절전 모드 그룹화

SELECT parent.id, parent.name, parent.column1, count(child.id) AS no_of_children 
FROM parent 
INNER JOIN child ON child.parent_id = parent.id 
GROUP BY parent.id, parent.name, parent.column1 

어떻게 HQL이 같은 무언가를 표현합니까? 나는 아이들을 (many-to-one을 사용하여) 콜렉션으로 매핑하려고 시도했다. 콜렉션 사이즈로부터 아이들의 수를 얻으려고했으나, Hibernate는 각각의 부모에 대해 모든 "자식"엔티티를 개별적으로로드해야했다.

결과적으로 성능상의 문제로 인해 1 대신 약 1000 개의 DB 쿼리가 실행됩니다.

이 문제가 발생합니까? 부모 엔티티이다 HQL

FROM Parent GROUP BY Parent.id, Parent.name, Parent.column1 

답변

0

변환 이전 모델링. 조인 절이 모델에 정의됩니다.

자식 수를 얻는 방법에 대해서는 각 부모를 개별적으로 고려하여 자식 모델의 Lob 필드를 제거하여 응용 프로그램 속도에 병목 현상을 일으킬 수 있습니다.

select parent.id, parent.name, parent.column1, count(child) 
from Parent parent 
join parent.Children as child 
group by parent.id, parent.name, parent.column1 
1

을 도왔다합니다 parent.Children "을 사용하여 Hibernate에게 join을 통해 콜렉션을 미리로드하도록 지시한다.
+0

나는 완전히 잘 모르겠지만, 내가 같이가/명시 적으로 작성해야합니다 수에 가입 생각 : : 왼쪽 가져 가입 "

희망 나는 다음과 같은 것을 시도 할 것이다 – LorenzCK