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을 대체할 다른 방법을 사용하기도 합니다.
하지만 이에 대해서는 상황과 요구사항에 따라 적절한 최적화 방법을 선택하셔야 합니다.
더 궁금한 사항이 있으시다면 언제든지 물어보세요! 즐거운 프로그래밍 공부되세요.
EmailSender 관련 문의
0
15
1
CRA ? 질문입니다
0
19
1
[해결됨]마지막 강의 내용 수정 화면이 기능을 못하네요.
0
18
1
[해결됨]부분적으로 화면 이동이 안되는 부분이 있습니다.
0
18
6
aws 계정 생성 질문
1
51
1
조회 메서드 네이밍 질문
0
53
1
음성불량
0
44
1
장애 격리 관련해서 궁금한 부분이 있어요
0
49
2
질문있습니다.
0
47
1
코드 깃허브는 없을까요?
1
54
2
핵사고날 아키텍처 기반으로 멀티 모듈 설계 시 질문드립니다..
0
63
2
인넬리제이 무료버전
0
54
1
Post, PostEntity에서 User, UserEntity 의존
0
54
1
내부 객체 직접 접근에 관하여.
0
92
2
CertificationServiceTest
0
53
1
FlushModeType.COMMIT (12:45) 예시코드 질문
0
61
1
readme에 대한 자료는 따로 받아볼수 있나요?
0
84
2
InvalidCurriculumException DIP 적용 여부 문의
0
68
2
Inner class로 Config를 지정하는 이유
0
58
2
Part 2 듣기전 복습하던 중, 아키텍처에 관한 질문이 있습니다.
0
94
2
테스트는 인터페이스를 대상으로 만드는것에 대해 궁금한 점이 있습니다.
0
55
1
리뉴얼 시기
0
114
2
JPA 엔티티로 만들었다고 기술종속이 아닌지에 대한 질문
0
106
3
설계 트레이드 오프 링크 접속 안됨
0
132
2





