To One 관계들을 먼저 조회하고, To Many관계는 각각 별도로 처리한다.
row 수가 증가하지 않는 (To One) 관계는 최적화 하기 쉬움으로 한번에 조회하고, To Many 관계는 최적화하기 어려움으로 findOrderItems()
같은 별도의 메서드로 조회한다.
- 사용 예시
( select 문에 new 오퍼레이터를 사용해 패키지명을 다적어준다)
컬렉션 조회 최적화 (map 사용)
"where oi.order.id in :orderId"
in문을 사용, Map을 사용해 매칭 성능을 향상 시킨다.hibernate.default_batch_fetch_size
, @BatchSize
로 최적화hibernate.default_batch_fetch_size
, @BatchSize
로 최적화엔티티 조회 방식은 패치 조인이나,
hibernate.default_batch_fetch_size
,@BatchSize
같이 코드를 거의 수정하지않고, 옵션만 약간 변경해서, 다양한 성능 최적화를 시도할 수있다. 반면에 DTO를 직접 조회하는 방식은 성능을 최적화 하거나 성능 최적화 방식을 변경할때 많은 코드를 변경해야 한다.
📍 캐시 사용시 엔티티로 사용 X, 꼭 DTO 클래스를 만들어서 사용