2014-03-12 7 views
1

Hibernate에서 구현 한 JPA를 일괄 처리 페칭을 사용하여 열심히로드하는 것을 강요 할 수 있습니까?Eager Loading 일괄 일괄 가져 오기

왜 내가 이상한 일을하고 싶은지 궁금 할 것입니다. 그래서 설명해 드리겠습니다.

두 개의 엔티티 AB이 있습니다. A에서 B까지는 다 대일 관계가 있습니다.

엔티티를 검색하여 A 엔티티를로드하려는 경우 리포지토리에서 반환되기 전에 완전히로드하려고합니다.

그러나 A이 많고 B이 거의 없으므로 (관련) B은 둘째 레벨 캐시에 저장됩니다. 따라서 나는 데이터베이스에서 매번 B을받는 것을 피하고 싶다.

답변

0

나는 당신의 문제를 이해로서, 솔루션은 NamedQuery에 FETCH 명령과 함께 NamedQuery을 사용하는 것입니다 : 당신이 배치 크기를 지정하려면

SELECT DISTINCT B LEFT JOIN FETCH B.a A//will return fully loaded B instances 

, 당신은 (최대 절전 모드에서 @BatchSize을 사용할 수 있습니다 JPA는 아님). 예를 들어 this link을 확인하십시오.

+0

하지만 B 인스턴스를로드하려면 조인을 사용하여 두 번째 레벨 캐시를 무시해야합니다. –

+0

IMHO 예, NamedQuery의 경우와 마찬가지입니다 (쿼리 결과가 캐시되지 않은 경우). 그러나 NamedQueries없이'@ BatchSize'를 사용할 수 있습니다. –