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

kmj06030님의 프로필 이미지

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

페치 조인 1 - 기본

페치 조인1 - 기본 질문 있습니다.

24.01.11 10:01 작성

·

375

1

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]

Team teamA = new Team();
            teamA.setName("팀A");
            em.persist(teamA);

            Team teamB = new Team();
            teamB.setName("팀B");
            em.persist(teamB);

            Member member1 = new Member();
            member1.setUsername("회원1");
            member1.setTeam(teamA);
            em.persist(member1);

            Member member2 = new Member();
            member2.setUsername("회원2");
            member2.setTeam(teamA);
            em.persist(member2);

            Member member3 = new Member();
            member3.setUsername("회원3");
            member3.setTeam(teamB);
            em.persist(member3);

String query = "select t from Team t join fetch t.members";
            List<Team> result = em.createQuery(query, Team.class)
                    .getResultList();

위의 코드를 실행했을 때 강사님의 결과값은 3개가 나왔는데 저는 2개가 결과로 나왔습니다. 시간이 지나서 JPQL이 중복을 제거하게 바뀐 걸까요??

답변 2

1

y2gcoder님의 프로필 이미지

2024. 01. 11. 10:14

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

말씀하신 부분이 맞습니다. Hibernate 6부터는 distinct가 자동 적용됩니다 :)

다음 링크(클릭)을 참고해주십쇼!

감사합니다.

0

인프런 AI 인턴님의 프로필 이미지

2024. 01. 11. 10:06

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

질문자님께서 제시한 코드는 팀과 회원을 연관 관계로 갖는 JPA(JAVA Persistence API)에서 사용하는 코드로 보입니다. 여기서 중요한 개념은 ‘페치 조인(Fetch Join)‘인데요, 이는 연관된 엔티티 혹은 컬렉션을 SQL 한 번으로 함께 조회하는 기능을 말합니다.

질문자님께서 말씀하신 결과값의 차이는 두 가지 상황으로 발생할 수 있습니다. 첫째로는 JPA 구현체(예: Hibernate)의 버전 차이로 인해 쿼리 결과의 중복 제거 방식이 변경되었을 가능성입니다. 둘째로는 조회된 결과를 보여주는 방식에서 어떠한 처리(예: DISTINCT 등)가 적용되었을 가능성입니다.

질문자님의 경우에는 동일한 팀에 속한 멤버를 조회하는 코드이기 때문에 중복 제거 로직이 적용되어 결과가 2개로 나온 것일 수 있습니다. 실제로 JPQL에서는 DISTINCT 키워드를 사용하여 중복을 제거할 수 있습니다.

제공해주신 정보만으로 확실한 답변을 드리기 어려우며, 강의와 환경 설정이 좀 더 구체적으로 제공되었을 때 명확한 판단이 가능할 것 같습니다.

아래는 관련하여 다른 수강생의 유사한 질문에 대한 답변 예시입니다.

페치 조인과 일반 조인의 차이가 무엇인지 궁금하신가요?
위의 링크에서는 일반 조인과 페치 조인의 차이점에 대한 질문과 강사님의 답변을 확인하실 수 있습니다.

즉시 로딩과 지연 로딩의 실행 결과에 대한 질문이신가요?
이 링크에서는 즉시 로딩과 지연 로딩이 쿼리에 미치는 영향과 페치 조인이 필요한 이유에 대해 설명하고 있습니다.

질문자님의 경우와 직접적인 관련이 있는 문서를 찾지 못했지만, 유사한 주제의 질문이니 참고하실 수 있을 것 같습니다.

페치 조인에 대한 좀 더 구체적인 설명이 필요하시다면 구체적인 문제 상황을 추가로 기술해주시면, 해당 내용에 기반하여 더 정확한 답변을 찾아드릴 수 있을 것입니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

kmj06030님의 프로필 이미지

작성한 질문수

질문하기