본문 바로가기

Spring/JPA

JPA- DISTINCT

DISTINCT

 join fetch로 컬렉션을 조인하여 조회하는 경우 동일 엔티티가 중복 조회되는 문제가 존재한다.

예를 들어 Team1이라는 엔티티에 Member엔티티 3개(member1, member2, member3)가 매핑 되어있다고 하자. 이때

" select t from Team t join fetch t.members where t.name = "TEAM1" "라는 jpql로 쿼리를 날리게 된다면 이는 sql로

" SELECT T.*, M.* FROM TEAM T JOIN MEMBER M ON T.MEMBER_ID = M.MEMBER_ID WHERE T.NAME = "TEAM1" "로 번역되어 조인된 테이블은 총 세개 row가 만들어질 것이다.

 

여기서 distinct 키워드를 추가하여 "select t from Team t distinct join fetch t.members" jpql로 쿼리를 날리면 엔티티를 가져올 때 중복된 엔티티가 있는 경우 중복을 제거하여 가져와서 한개의 Team1만 조회가 된다.

 

  • jpql에 추가된 distinct 키워드는 sql문에도 그대로 추가되지만 sql의 distinct는 완전히 동일한 row만을 제거할 수 있다.(DB 테이블에서는 완전히 동일한 row가 없는 경우 제거되지 않는다.)
  • 어플리케이션 자체적으로 중복된 엔티티를 제거한다. (연관된 엔티티가 달라도 중복된 엔티티가 있다면 중복을 제거한다.)

 

어플리케이션에선 중복된 엔티티를 제거한다.

'Spring > JPA' 카테고리의 다른 글

JPA- Open Session In View  (0) 2023.07.16
JPA- 벌크연산  (0) 2023.06.19
JPA-Join Fetch  (0) 2023.06.18
JPA- 경로 표현식  (0) 2023.06.18
JPA- 조건식의 사용  (0) 2023.06.18