• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

EntityGraph 이용시 컬렉션 페치조인의 경우 질문

22.08.25 23:43 작성 조회수 282

1

안녕하세요!

JPQL로 엔티티 페치조인이 아닌 , 일대다 입장에서 컬렉션 페치조인을 할 경우 -> 데이터 뻥튀기 문제가 발생하여 distinct 키워드로 뻥튀기된 데이터를 없애주어야 했느데요 ,

EntityGraph를 이러한 컬렉션 페치조인에 사용하여도 distinct를 쓴것 처럼 데이터 뻥튀기 문제가 발생하지 않는지 궁금합니다.

감사합니다.

답변 1

답변을 작성해보세요.

0

y2gcoder님의 프로필

y2gcoder

2022.08.26

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

먼저 답변에 대한 답을 드리자면 left outer join 을 이용해서 이 문제를 해결한다고 합니다.

그밖에 좀 더 자세한 정보를 원하시면 해당 링크를 참조해주세요 :)

https://velog.io/@meme2367/EnjoyDelivery-%EC%9D%B4%EC%8A%88-1.-%EA%B0%80%EA%B2%8C-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A1%B0%ED%9A%8C-%EC%8B%9C-N1%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0%ED%95%98%EA%B8%B0-Fetch-join-EntityGraph
감사합니다.

요니님의 프로필

요니

질문자

2022.08.26

답변 감사합니다.

함께 제시해주신 링크의 글을 읽어보았는데요 ,

여기서도 inner join을 하는 JPQL 기반 페치조인 방식과 달리

left outer join을 하는 EntityGraph 동작을 이용하여 컬렉션 페치조인을 하는 컬렉션 대상을 [1개만] 명시하여도 문제가 없다는 내용으로 이해하였습니다.

그렇다면 혹시 EntityGraph를 사용하여 이렇게 컬렉션 페치조인을 할 때, 2개 이상의 여러 컬렉션을 명시해도 되는지 추가적으로 여쭤보고 싶습니다.

기존 JPQL 기반 페치조인에서는 distinct로 데이터 뻥튀기 문제를 처리할 수 있었던게 한 컬렉션 까지여서 2개이상의 컬렉션 페치조인은 불가능 한것으로 이해하였는데, EntiyGraph도 동일한지 or 혹은 이부분을 극복시켜주는지 여쭙고 싶스빈다.

y2gcoder님의 프로필

y2gcoder

2022.08.27

저도 찾아본 결과 EntityGraph 와 fetch join의 차이는 앞서 보았던 inner join / left outer join 정도라 같은 문제가 발생할 것으로 보입니다.
2개 이상의 컬렉션을 조회하는 경우는 영한님의 JPA 활용2편을 보시면 좀 더 좋은 해결방법을 알려주시니 추천드립니다.