강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

오리쉐리님의 프로필 이미지
오리쉐리

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

주문 조회 V3.1: 엔티티를 DTO로 변환 - 페이징과 한계 돌파

findAllWithMemberDelivery 메서드 질문드립니다.

작성

·

22

0

findAllWithMemberDelivery

이 메서드 내부에서, join fetch oi.item i는 안해주셨는데, 안해주는 이유가 무엇일까요?

조회하려는 엔티티인 Order기준으로 한 페치조인이 아니고 orderItem기준으로 한 페치조인이기 때문에 그런것일까요?

아니면 order가 아니라 orderItem에 있는 item이기때문에 그런것일까요?

답변 3

0

안녕하세요. 오리쉐리님, 공식 서포터즈 y2gcoder입니다.

먼저 간단하게 말씀드리자면 OrderItem에 대해 조인을 걸어주지 않으면 쿼리 문에서 Item을 걸어줄 수가 없습니다.

그리고 해당 섹션에서 OrderItem에 대해서도 페치 조인을 걸지 않는 이유는 지연 로딩 최적화를 통해 조회하기 때문입니다.

그 후에 orderitem 목록들의 item 각각을 가져오는 것에 대해서는 마찬가지로 지연로딩에 맡기기 때문입니다. 어떻게 보면 앞서서 OrderItem을 이미 지연로딩 최적화 기법으로 로딩하면서 쿼리에 의한 제어를 해주지 않았기 때문에 Item도 같이 제어하지 못하는 것이라 생각해주시면 좋을 것 같습니다 🙂
OrderItem 목록에서 Item 을 지연 로딩하는 부분은 직접 쿼리로 확인해보시면 학습에 더 효과적일 것 같습니다!

감사합니다.

0

오리쉐리님의 프로필 이미지
오리쉐리
질문자

저는 AI가 말한 OrderItem에 대한 페치 조인 질문드리는게

아니라 Item에 대한 페치조인 질문입니다ㅜㅜ

0

안녕하세요, 인프런 AI 인턴입니다.

오리쉐리님이 질문해주신 내용은 JPA의 페치 조인 관련 명확한 이해를 필요로 합니다. findAllWithMemberDelivery 메서드는 일반적으로 Order 엔티티를 MemberDelivery 엔티티와 함께 페치 조인하여 가져오는 방법을 말합니다. 그런데 OrderItem에 대한 페치 조인을 하지 않은 이유를 묻는 질문이시군요.

이 경우, 조회하는 엔티티가 Order 기준이기 때문에 OrderItem에 대한 추가적인 페치 조인은 필요하지 않다고 판단할 수 있습니다. Order는 기본적으로 toOne 관계의 MemberDelivery만을 페치 조인하는 게 대표적이며, toMany 관계의 엔티티인 OrderItem은 기본적으로 페치 조인하지 않는 경우가 많습니다. 이유는 toMany 관계에서 페치 조인 시 많은 데이터가 중복으로 조회되거나 효율적이지 않을 수 있기 때문입니다.

관련된 유사한 질문과 답변을 통해 더 많은 맥락을 이해하실 수 있도록 다음 링크를 참고해 주세요:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

오리쉐리님의 프로필 이미지
오리쉐리

작성한 질문수

질문하기