• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

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

24.01.11 10:01 작성 조회수 268

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님의 프로필

y2gcoder

2024.01.11

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

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

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

감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.11

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

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

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

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

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

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

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

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

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

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

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