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