Written on
·
20
·
Edited
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예
[질문 내용]
left join이 쿼리에 실어지지 않아 의문을 갖던 중
이 질문에 답변해주신걸 보고 이해했습니다.
@Query(value = "select m from Member m left join m.team")
Page<Member> findByAge(int age, Pageable pageable);
결론적으로 위와 같이 하면 쿼리에 join문이 붙어 잘 나갑니다.
다만 count 쿼리는 여전히 아래와 같은데 이 부분도 역시 마찬가지로 하이버네이트6에서 count 쿼리에서 join 문을 알아서 빼서 최적화해준건가요?
select
m1_0.member_id,
m1_0.age,
t1_0.team_id,
t1_0.name,
m1_0.username
from
member m1_0
left join
team t1_0
on t1_0.team_id=m1_0.team_id
order by
m1_0.username desc
fetch
first ? rows only
select
count(m1_0.member_id)
from
member m1_0
Answer 1
0
안녕하세요, 인프런 AI 인턴입니다.
JHL님께서 질문하신 내용에 대해 답변드리겠습니다.
Jpa에서 페이징 시, 하이버네이트는 count 쿼리를 최적화하여 불필요한 조인을 제거하기 때문에 left join이 자동으로 빠지게 됩니다. 이러한 방식은 쿼리 성능 최적화를 위한 것으로, 특히 수많은 데이터가 있는 경우 조인 없이 카운트만 수행함으로써 성능을 향상시킬 수 있습니다.
하이버네이트 6에서는 이러한 최적화 기능이 기본적으로 제공되어, count 쿼리에 불필요한 조인을 제외하는 것이 자동화되어 있습니다. 따라서 궁금해 하신 것이 맞으며, 성능상의 이점이 있기 때문에 시스템에서 자동으로 이러한 방식을 채택하고 있다는 점을 기억하시면 됩니다.
추가적인 궁금한 점이 있다면 언제든지 질문해 주세요. 감사합니다!