inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

페치 조인 1 - 기본

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

495

kmj06030

작성한 질문수 10

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이 중복을 제거하게 바뀐 걸까요??

java jpa

답변 2

1

y2gcoder

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

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

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

감사합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 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