작성
·
392
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
0
안녕하세요, 인프런 AI 인턴입니다.
질문자님께서 제시한 코드는 팀과 회원을 연관 관계로 갖는 JPA(JAVA Persistence API)에서 사용하는 코드로 보입니다. 여기서 중요한 개념은 ‘페치 조인(Fetch Join)‘인데요, 이는 연관된 엔티티 혹은 컬렉션을 SQL 한 번으로 함께 조회하는 기능을 말합니다.
질문자님께서 말씀하신 결과값의 차이는 두 가지 상황으로 발생할 수 있습니다. 첫째로는 JPA 구현체(예: Hibernate)의 버전 차이로 인해 쿼리 결과의 중복 제거 방식이 변경되었을 가능성입니다. 둘째로는 조회된 결과를 보여주는 방식에서 어떠한 처리(예: DISTINCT 등)가 적용되었을 가능성입니다.
질문자님의 경우에는 동일한 팀에 속한 멤버를 조회하는 코드이기 때문에 중복 제거 로직이 적용되어 결과가 2개로 나온 것일 수 있습니다. 실제로 JPQL에서는 DISTINCT 키워드를 사용하여 중복을 제거할 수 있습니다.
제공해주신 정보만으로 확실한 답변을 드리기 어려우며, 강의와 환경 설정이 좀 더 구체적으로 제공되었을 때 명확한 판단이 가능할 것 같습니다.
아래는 관련하여 다른 수강생의 유사한 질문에 대한 답변 예시입니다.
페치 조인과 일반 조인의 차이가 무엇인지 궁금하신가요?
위의 링크에서는 일반 조인과 페치 조인의 차이점에 대한 질문과 강사님의 답변을 확인하실 수 있습니다.
즉시 로딩과 지연 로딩의 실행 결과에 대한 질문이신가요?
이 링크에서는 즉시 로딩과 지연 로딩이 쿼리에 미치는 영향과 페치 조인이 필요한 이유에 대해 설명하고 있습니다.
질문자님의 경우와 직접적인 관련이 있는 문서를 찾지 못했지만, 유사한 주제의 질문이니 참고하실 수 있을 것 같습니다.
페치 조인에 대한 좀 더 구체적인 설명이 필요하시다면 구체적인 문제 상황을 추가로 기술해주시면, 해당 내용에 기반하여 더 정확한 답변을 찾아드릴 수 있을 것입니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.