2011-04-29 3 views
3

데이터베이스의 두 테이블 사이의 외래 키 관계로 표현되는 클래스 A과 클래스 B 사이에는 1이 많은 관계가 있습니다. 최대 절전 모드가 B의 컬렉션을 열심히로드하여 세션 외부로 이동할 수 있기를 바랍니다.컬렉션의 집중적이고 열정적 인로드

따라서 일대 다 및 다 대일 매핑 항목 모두에 lazy="false"을 지정합니다.

B.hbm는 :

<many-to-one cascade="all" fetch="join" lazy="false" 
    class="A" name="..."> 
    <column name="adgroup_id"/> 
    </many-to-one> 

A.hbm

<list cascade="all" inverse="true" name="..." lazy="false" fetch="join"> 
     <key column="adgroup_id" /> 
     <one-to-many class="B" /> 
</list> 

나는 최대 절전 모드에 의해 실행 된 SQL이 실제로 행의 예상 수를 반환 통지,하지만 난

A.getBs()를 호출 할 때, 내가 너무 얻을 많은 요소. 실제로 데이터베이스의 ID가 자동 할당되므로 n + 1 요소를 반환하는 것으로 보입니다. 여기서 n은 B의 테이블에서 현재 가장 높은 ID입니다.

여기에 무슨 일이 일어나고 있습니까? N + 1 문제의 A

답변

-4

아주 좋은 설명을 반환하는 template.get(class,id)를 호출 내가 BTW 봄 최대 절전 템플릿을 사용하고

: What is SELECT N+1?

+6

죄송합니다, 나는 당신의 대답은 유용 방식을 볼 수 실패합니다. 단일 선택 만이 여기에서 수행되어 예상 행 수를 리턴합니다. 그러나 Java에서 반환 된 컬렉션의 항목 수가 너무 많아졌습니다. – ThuneGrill