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 |