Member
- Team
관계는 N:1
TeamQueryRepository.findThreeTeams()와 같이 페이징 API와 fetchJoin을 함께 사용할 경우,
Hibernate:
select
team0_.id as id1_1_0_,
members1_.id as id1_0_1_,
team0_.name as name2_1_0_,
members1_.name as name2_0_1_,
members1_.team_id as team_id3_0_1_,
members1_.team_id as team_id3_0_0__,
members1_.id as id1_0_0__
from
team team0_
left outer join
member members1_
on team0_.id=members1_.team_id
발생한 쿼리는 다음과 같다. limit 쿼리가 나가지 않는다!
페치조인과 페이징을 함께 쓰면 페이징이 어플리케이션 단에서 조정된다.
우선 찾은 해결책은 Team에서 Member를 꺼내지 않고, Member에 바로 접근하는 것이다. MemberQueryRepository.findMembersByTeam()을 참고하자.
---
1. countDistinct()
memberQueryRepository.findMembersCountDistinct()
select
count(distinct member0_.id) as col_0_0_
from
member member0_ limit ?
특이점: limit이 걸린다. ❗️ 전체 limit이 걸리는 것 같긴 한데 왜, 얼마나 걸리는지는 모르겠다. 아직 풀리지 않는 의문
2. count()
memberQueryRepository.findMembersCount()
select
count(member0_.id) as col_0_0_
from
member member0_ limit ?
특이점: limit이 걸린다.
3. fetchCount()
memberQueryRepository.findMembersFetchCount()
select
count(member0_.id) as col_0_0_
from
member member0_
특이점: count() 쿼리로 변경되어 실행된다. limit이 없다.