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

Byunghyun Yoon님의 프로필 이미지
Byunghyun Yoon

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

주문 조회 V3: 엔티티를 DTO로 변환 - 페치 조인 최적화

distinct 질문입니다.

작성

·

380

0

안녕하세요 김영한 선생님~!

distinct 관련해서 질문 있습니다.

강의에서 jpa의 distinct는 두가지 기능이 있다고 하셨는데

1. SQL에 distinct 넣어줘서 DB에서 실행

2. 애플리케이션에서 식별자로 distinct 수행.

여기서 애플리케이션에서 식별자로 distinct를 할때, 식별자가 기준이긴하지만 엄밀히 데이터는 다른 데이터인데 어떤 데이터를 버리고 어떤 데이터를 채택하는건가요?

예제에서는 주문(Order)데이터 1개에 OrderItem(주문상품) 데이터 (JPA1, JPA2) 이렇게 2개와 매칭되고 DB입장에서는 데이터가 다르기 때문에 모든 컬럼에 대해 distinct를 하면 2개가 나오는데요,

JPA 입장에서는 식별자 기준으로 distinct를 한다면 저 2개의 데이터 중에 어떤 데이터를 무슨 기준으로 버리고 선택하는건가요?

답변 2

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. Byunghyun Yoon님

강의 11:19초를 보시면

distinct 적용 전

Order@6cd8116c id=4

Order@6cd8116c id=4

Order@e36f398 id=11

Order@e36f398 id=11

distinct 적용 후

Order@6cd8116c id=4

Order@e36f398 id=11

로 되어 있습니다.

JPA에서 distinct는 이렇게 엔티티 객체가 완전히 동일할 때 중복을 추가로 제거해줍니다.

한번 궁금하신 부분을 실제로 테스트해보시면 딱 이해가 되실거에요.

감사합니다.

0

강사님 질문이 하나 있습니다ㅠ.

JPA강의에서는 식별자를 기준으로 중복제거를 한다고 한것같은데

PK값을 보는건가요 아니면 객체의 주소를 보는 것 인가요 ?

Byunghyun Yoon님의 프로필 이미지
Byunghyun Yoon

작성한 질문수

질문하기