N + 1 문제 해결 fetch join 관련해서 질문드릴 것이 있습니다!
509
작성한 질문수 87
안녕하세요. 38강의 N + 1 문제를 해결하기 위한 fetch join 문제 해결과 관련해서 제가 발견(?)한 것을 질문드리고자 합니다!
수업 내용 중 N + 1 문제를 querydsl을 사용해서 해결하는 것을 보여주셨는데요. 코드가 다음과 같았습니다.
class UserRepositoryCustomImpl(
private val queryFactory: JPAQueryFactory
) : UserRepositoryCustom {
override fun findAllWithHistories(): List<User> {
return queryFactory
.select(user)
.distinct()
.from(user)
.leftJoin(userLoanHistory).on(userLoanHistory.user.id.eq(user.id)).fetchJoin()
.fetch()
}
}그러고 테스트를 돌렸을 때 쿼리가 찍히는 걸 보면 다음과 같습니다.

N + 1 문제가 아직 발생하고 있는 것 같습니다.
조금 이상해서 구글링을 해보니 querydsl에서 on 절을 사용하면 두 엔티티가 연관관계라는 것을 인식하지 못 한다고 하네요! 그래서 코드를 다음과 같이 좀 바꿔봤습니다.
class UserRepositoryCustomImpl(
private val queryFactory: JPAQueryFactory
) : UserRepositoryCustom {
override fun findAllWithHistories(): List<User> {
return queryFactory
.select(user)
.distinct()
.from(user)
.leftJoin(user.userLoanHistories, userLoanHistory).fetchJoin()
.fetch()
}
}이렇게 바꾸고 쿼리를 찍히는 것을 확인하니까

한 번에 fetch join 되면서 가져오는 것 같습니다!
한 번 확인해주시면 감사하겠습니다!
답변 1
안녕하세요 혹시 프론트 코드 제공받을 수 있을까요?
0
69
2
실행이 안되네요
0
67
2
프론트 영역 보는법
0
52
2
companion object
0
79
2
Custom 레프직토리 형식
0
60
2
Querydsl 도입
0
68
2
fetch join DISTINCT 중복제거
1
84
2
표준 예외와 커스텀 예외 사용 전략 질문
0
92
3
이 질문이 왜 없는지 이해가 안 되지만 문제 인식 및 해결 방법 남깁니다.
1
177
2
테스트를 위한 코드
1
105
2
프로젝트 실행 에러
0
153
2
PDF 문서에 오타가 있어서 알려드립니다.
1
102
1
enum질문
1
86
1
테스트 후 AfterEach 함수에서 나오는 쿼리
0
136
2
테스트 fixture
1
211
2
./gradlew test 실행시 인식할수 없다고 뜹니다.
0
141
1
test 코드 실행시 경고가 발생합니다.
0
141
1
13강 User Kotlin 변환중
2
170
3
'추가 - 코프링과 플러그인' 강의 7:46 allopen 관련 질문
2
174
1
-
0
141
2
4:28 build.gradle 수정 시 kotlin-reflect관련 implementation 추가 해야할까요?
0
314
3
junit import 불가
0
276
3
테스트 코드와 관련하여 질문이 있습니다.
1
219
1
hibernate가 select를 두번 하는 이유
0
240
1






