fetch join 질문
Fetch join에 있어 궁금한 점이 있어서 남깁니다.
Fetch join을 사용할 때 서로 떨어진 테이블끼리도 fetch join을 사용할 수 있는지 궁금합니다.
일단 페이징 같은 기능이 없다는 가정하에,
예를 들어 Entity 1 - Entity 2가 다대일의 관계이고, Entity 2 - Entity 3이 다대일의 관계로 묶여있다면,
select * from Entity1 e1 join fetch e.Entity2 join fetch e.Entity2.Entity3;
위와 같이 join fetch e.Entity2.Entity3; 이러한 fetch join 문이 가능한가에 대해서 궁금합니다.
만약 이것이 불가능하다면 저러한 상황에서 Entity2를 기준으로 쿼리를 하는 것 말고 다른 방법으로 최적화 할 수 있는 방법이 있는지 궁금합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴이에요.
Fetch join에 대해 궁금하신 점에 대해 답변해드리겠습니다.
Fetch join은 JPA에서 엔티티 그래프를 사용하여 한 번의 쿼리로 연관된 엔티티들을 함께 로딩하는 기능입니다.
Fetch join을 사용할 때, 서로 떨어진 테이블 간에도 사용할 수 있습니다.
즉, 여러 개의 연관 관계를 Join fetch로 함께 로딩할 수 있습니다.
보시고 계신 쿼리는 다수의 연관 관계를 함께 로딩하는 쿼리로 정상적으로 작동합니다.
select * from Entity1 e1 join fetch e1.Entity2 join fetch e1.Entity2.Entity3;
이렇게 작성된 fetch join 쿼리를 실행하면 Entity1, Entity2, Entity3에 대한 모든 데이터가 한 번의 쿼리로 로딩됩니다.
만일 위의 쿼리가 원하는 결과를 제대로 리턴하지 않는다면, 엔티티의 매핑 설정이나 데이터 상태 등을 확인해보시는 것이 좋습니다.
참고로, Fetch join을 사용할 때에는 Lazy 로딩이 아닌 Eager 로딩으로 인해 데이터베이스 레코드 뻥튀기 현상을 유발할 수 있으므로 주의해야 합니다.
이러한 이유로 일부 경우에는 Fetch join을 대체할 다른 방법을 사용하기도 합니다.
하지만 이에 대해서는 상황과 요구사항에 따라 적절한 최적화 방법을 선택하셔야 합니다.
더 궁금한 사항이 있으시다면 언제든지 물어보세요! 즐거운 프로그래밍 공부되세요.
스프링부트 서버 에러나요
0
14
1
RepositoryTest의 패키지 위치가 domain인 이유
0
29
2
도메인 모델에서 관계와 규칙을 구분하는 방법
0
37
2
16 강의 메세지 retryCount의 의도
0
23
2
JPA Repository 질문이 있습니다!
1
33
2
페이지네이션 처리를 쿼리에서 하는 방식 질문
1
36
1
UserService, CertificationService 책임 분리 기준 질문
0
26
1
실무 조언 관련 질문입니다.
0
41
1
sdk 설정 오류
0
49
2
H2데이터베이스 파일 생성
0
49
2
SpringBoot 4.X에서의 Querydsl 설정
0
84
2
REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!
0
29
1
오탈자 - @Transactional
0
55
1
Dto와 Entity 사용 관련 질문
0
30
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
49
2
EC2 실습 중 docker-compose / docker ps 실행 시 권한 오류 문의
2
71
1
application.properties 작성 관련 질문
0
43
2
색깔구분
0
44
3
gradlew, java -jar 로 애플리케이션 실행시키기에서
1
49
1
리액트 관련 질문이 있습니다.
0
62
2
강의 관련 외 질문입니다.
0
65
2
update()에 사용하는 setter 질문드립니다.
0
47
1
스프링부트 버전
0
67
2
querydsl 오픈소스에 대한 질문
0
70
1





