페치 조인 대상에는 별칭을 줄 수 없다. (team100개중 위에 5개만 가져온다 이런거 할려고 하면 안됨 기본적으로 설계가 다 가져오는게 기반임 만약 그렇게 가져오고 싶으면 Member 조회 부분으로 따로 설계해야 ) • 하이버네이트는 가능, 가급적 사용X (join fetch 여러번 해서 할때 정도만 사용)
둘 이상의 컬렉션은 페치 조인 할 수 없다.
컬렉션을 페치 조인하면 페이징 API(setFirstResult, setMaxResults)를 사용할 수 없다. • 일대일, 다대일 같은 단일 값 연관 필드들은 페치 조인해도 페이징 가능 • 하이버네이트는 경고 로그를 남기고 메모리에서 페이징(매우 위험)
연관된 엔티티들을 SQL 한 번으로 조회 - 성능 최적화
엔티티에 직접 적용하는 글로벌 로딩 전략보다 우선함 • @OneToMany(fetch = FetchType.LAZY) //글로벌 로딩 전략
실무에서 글로벌 로딩 전략은 모두 지연 로딩
최적화가 필요한 곳은 페치 조인 적용
이는 꼭 컬렉션으로 페이징 할려고 할때? 페치조인하면 안되니 BatchSize라는 카드를
실무에서 persistence.xml 파일에서 글로벌 세팅으로 배치 사이즈를 1000 이하로 주면 성능 잘나옴
→ 설정 값인 **100**은 한 번의 쿼리로 최대 100개의 엔터티를 가져오도록 지정한 것입니다. (N+1 쿼리 문제 해결하고 성능 향상 시킴)
<property name="hibernate.default_batch_fetch_size" value="100"/>