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
12
1
join에대해 질문드립니다.
0
19
1
코드 질문
0
25
1
To-Do App
0
27
1
twitterdb 연결이 안돼요
1
27
2
@JsonIgnore 이후 Internal Server Error가 발생하지 않습니다.
0
33
2
changeTeam 메서드 질문
0
35
1
테스트 관련 질문!
0
55
2
안녕하세요 질문있습니다.
0
46
2
application.properties가 적용되지 않아요
1
69
3
새 프로젝트 속 제너레이터에 SpringBoot가 없습니다.
0
54
2
설정 정보 없이 임베디드 데이터베이스 생성
0
40
1
OrderServiceTest 상문주문 테스트 시 update 쿼리 문의
0
41
1
N+1 관련해서 질문있습니다.
0
95
3
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
55
2
inheritance startegy 선택시 고려사항
0
39
1
Entity 동등성 비교
0
40
1
패키지 구분에 대해 궁금한게 있습니다
0
49
2
스프링부트 서버 에러나요
0
37
1
RepositoryTest의 패키지 위치가 domain인 이유
0
60
2
도메인 모델에서 관계와 규칙을 구분하는 방법
0
84
2
16 강의 메세지 retryCount의 의도
0
46
2
JPA Repository 질문이 있습니다!
1
58
2
페이지네이션 처리를 쿼리에서 하는 방식 질문
1
50
1





