fetch join 관련 질문입니다
190
작성한 질문수 3
A : B = 1 : N , B : C = 1 : N , C : D = N : 1
현재 이런 구조인데 한번에 데이터를 땡겨오고싶으면 C를 기준으로 A, B, D 전부 fetch join으로 가져오면 되는걸까요? 아니면 이렇게 하면 문제가 있을까요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. lllilililll님.
현재 질문 주신 내용은 JPA에서 Fetch Join을 사용하여 여러 관계에 대해 데이터를 한 번에 가져올 수 있는지와 이에 따른 잠재적 문제점에 대한 것입니다.
다대일(N:1) 관계를 기준으로 많은 데이터를 한 번에 가져오는 경우, Fetch Join을 활용하면 한 쿼리로 모든 관련 데이터를 가져올 수 있어 성능적으로 유리할 수 있습니다. 하지만 주의할 점도 있습니다:
Fetch Join의 한계: JPA에서는 다대일(N:1) 관계에 대해서는 자유롭게 Fetch Join을 사용할 수 있지만, 일대다(1:N) 관계에서는 Fetch Join 시 동일한 엔티티가 중복해서 반환되거나 페이징 처리가 어렵다는 문제가 발생할 수 있습니다.
성능 이슈: Fetch Join 을 많이 사용하면 SQL 쿼리의 복잡도가 증가하고, 이는 결과적으로 시스템 성능에 영향을 미칠 수 있습니다.
JPQL 작성 예시:
SELECT c FROM C c JOIN FETCH c.a a JOIN FETCH c.b b JOIN FETCH c.d d이 예시를 통해
C를 기준으로 연관된 모든 데이터를 Fetch Join으로 가져올 수 있습니다. 그러나 이 과정에서 중복된 데이터가 발생할 수 있습니다.
기본적인 규칙은 to-one 관계에서는 여러 개의 Fetch Join을 사용할 수 있지만 to-many 관계에서는 주의가 필요하다는 것입니다. 특히 페이징 쿼리와의 혼합 사용 시 문제가 생길 수 있습니다.
이 질문과 관련된 구체적인 사례를 다룬 유사한 질문을 Inflearn 질문 게시판에서 확인할 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
강의 관련 외 질문입니다.
0
79
2
SpringBoot4 + Hibernate7 모듈 등록 방법 공유
1
97
1
BeanCreationException
0
96
3
Update 후 UpdateMemberResponse 매핑할 때
0
55
1
트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?
0
102
2
페이징 + 검색조건 관련해서 질문드립니다.
0
74
1
Query Dsl Q파일 질문입니다.
0
86
1
루트 쿼리라는것은
0
62
1
메서드를 분리하는 기준
0
70
1
findAllWithMemberDelivery 메서드 질문드립니다.
0
116
3
연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략
0
91
2
fetch join과 영속화와 OSIV의 관계
0
90
2
Distinct 사용 전 결과에 대한 의문
0
117
2
레포지토리 계층에서의 트랜잭션에 대한 의문
0
61
1
영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.
0
79
2
dto 필드 속 엔티티 여부
0
63
1
뷰템플릿 사용 시
0
82
2
Result 클래스 관련 질문
0
56
1
@PostConstruct 프록시 관련 질문드립니다
0
88
1
DTO 대신 Form 사용은 안되나요?
0
140
1
OSIV ON 상태일 때
0
99
1
fetch join VS fetch join 페이징 궁금증
0
189
2
양방향 연관관계 알아보는 법?
0
109
1
16강 17강 간단 정리 이게 맞을까요 ?
0
168
2





