민스씨의 일취일장

TIssue | JPA | 스프링 부트와 JPA 활용 2 - 김영한 | Fetch Join에 distinct 적용 안해도 중복 제거되는 상황 본문

Programming Language & Framework/JAVA & Spring

TIssue | JPA | 스프링 부트와 JPA 활용 2 - 김영한 | Fetch Join에 distinct 적용 안해도 중복 제거되는 상황

읻민스 2024. 11. 28. 17:29
반응형

JPA Fetch Join에 distinct 적용안해도 중복이 제거 돼있는 이슈에 대한 내용이다.

TIssue - JPA Fetch JOIN distinct 썸네일 이미지이다.
TIssue - JPA Fetch JOIN distinct

상황

인프런 <실전! 스프링 부트와 JPA 활용2 - 김영한> 강의의 '섹션5 - 주문 조회 V3: 엔티티를 DTO로 변환 - 페치 조인 최적화' 실습 중 distinct를 적용하지 않았음에도 중복이 제거되는 상황이 발생했다.

혹시 코드를 잘못적은 것은 아닌지 여러번 확인해 보았지만 코드에 상에는 문제가 없어 보였다. 원인을 찾던 중, 버전 차이 때문은 아닌지 알아보았다.

원인파악

현재 실습을 진행환경은 Java 17, 스프링부트 3.3이다.

Spring Project Verion Detail Image.
Spring Project Verion Detail

스프링 3.3은 HIbernate 6을 사용한다.

Hibernate Dependency Index List
Hibernate Dependency Details [출처 : https://docs.spring.io/spring-boot/3.3/appendix/dependency-versions/coordinates.html]

Hibernate 6 공식문서를 확인해 보면, 해당 내용이 명시 되어있다.

Hibernate Update : distinct
Hibernate Update : distict [출처 : https://docs.jboss.org/hibernate/orm/6.6/userguide/html_single/Hibernate_User_Guide.html#hql-distinct]

하이버네이트 6부터는 distinct를 적용하지 않아도 중복 데이터를 메모리에서 제거하기 때문에, distinct를 사용할 필요가 없다.

결론

HIbernate 6부터는 JPA를 이용한 Fetch Join에서 distinct를 사용하지 않아도 자동으로 중복을 제거해준다. 

728x90
반응형