페치 조인1 - 기본 질문 있습니다.
495
작성한 질문수 10
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
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
안녕하세요. kmj06030님, 공식 서포터즈 y2gcoder입니다.
말씀하신 부분이 맞습니다. Hibernate 6부터는 distinct가 자동 적용됩니다 :)
다음 링크(클릭)을 참고해주십쇼!
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
질문자님께서 제시한 코드는 팀과 회원을 연관 관계로 갖는 JPA(JAVA Persistence API)에서 사용하는 코드로 보입니다. 여기서 중요한 개념은 ‘페치 조인(Fetch Join)‘인데요, 이는 연관된 엔티티 혹은 컬렉션을 SQL 한 번으로 함께 조회하는 기능을 말합니다.
질문자님께서 말씀하신 결과값의 차이는 두 가지 상황으로 발생할 수 있습니다. 첫째로는 JPA 구현체(예: Hibernate)의 버전 차이로 인해 쿼리 결과의 중복 제거 방식이 변경되었을 가능성입니다. 둘째로는 조회된 결과를 보여주는 방식에서 어떠한 처리(예: DISTINCT 등)가 적용되었을 가능성입니다.
질문자님의 경우에는 동일한 팀에 속한 멤버를 조회하는 코드이기 때문에 중복 제거 로직이 적용되어 결과가 2개로 나온 것일 수 있습니다. 실제로 JPQL에서는 DISTINCT 키워드를 사용하여 중복을 제거할 수 있습니다.
제공해주신 정보만으로 확실한 답변을 드리기 어려우며, 강의와 환경 설정이 좀 더 구체적으로 제공되었을 때 명확한 판단이 가능할 것 같습니다.
아래는 관련하여 다른 수강생의 유사한 질문에 대한 답변 예시입니다.
페치 조인과 일반 조인의 차이가 무엇인지 궁금하신가요?
위의 링크에서는 일반 조인과 페치 조인의 차이점에 대한 질문과 강사님의 답변을 확인하실 수 있습니다.
즉시 로딩과 지연 로딩의 실행 결과에 대한 질문이신가요?
이 링크에서는 즉시 로딩과 지연 로딩이 쿼리에 미치는 영향과 페치 조인이 필요한 이유에 대해 설명하고 있습니다.
질문자님의 경우와 직접적인 관련이 있는 문서를 찾지 못했지만, 유사한 주제의 질문이니 참고하실 수 있을 것 같습니다.
페치 조인에 대한 좀 더 구체적인 설명이 필요하시다면 구체적인 문제 상황을 추가로 기술해주시면, 해당 내용에 기반하여 더 정확한 답변을 찾아드릴 수 있을 것입니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
inheritance startegy 선택시 고려사항
0
11
0
Entity 동등성 비교
0
14
1
실무 조언 관련 질문입니다.
0
41
1
H2데이터베이스 파일 생성
0
52
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
49
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
48
1
JPQL 메소드와 락
0
53
1
Delivery @OneToOne
0
57
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
89
2
UnsupportedOperationException 발생
0
82
3
H2 Database 연결이 안됩니다.
0
89
2
연관관계 매핑 질문드립니다.
0
82
2
h2데이터베이스 실행오류
0
105
2
persistence.xml
0
103
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
77
1
영속성 컨텍스트
0
62
1
JPA 프록시
0
90
1
Native Query와 MyBatis
0
63
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
84
1
임베디드 타입 예시 코드 관련 질문
0
112
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
91
3
인텔리제이 패키지 커서 단축키 질문
0
106
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
137
1
양방향 연관관계 시 연관관계 주인을 설정하는 이유
0
68
1





