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

siny7177님의 프로필 이미지
siny7177

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

페치 조인 2 - 한계

둘이상의 컬렌션에서 inner join은 왜 사용이 가능할까요? inner join에 대해 질문입니다!

해결된 질문

작성

·

207

3

  1. 컬렉션  inner join 시에도 데이터가 변하는 걸 실습으로 확인해봤습니다. 그 후  inner join 2번 사용 시MultipleBagFetchException를 발생시키는지 궁금해서 테스트 해보니 따로 발생시키지 않더라구요!
    영한님 책이 따로 있어서 확인해봤는데, 책에서는 fetch join 2개는 컬렉션 * 컬렉션 곱이 만들어지므로 주의해야하고, 하이버네이트 구현체의 경우 MultipleBagFetchException을 발생시킨다고 나와있는데, inner join은 MultipleBagFetchException을 발생시키지 않는 건가요?  같은이유로 데이터 중복값이 크게 증가해 발생해야하는게 아닌가 해서 질문드립니다! 왜 inner join은 하이버네이트가 막아두지 않은 것일까요?

    inner join이 2번 이상 사용이 가능한걸 보면 둘 이상의 컬렉션에 fetch join 을 막아둔 가장 큰 이유가 데이터 중복이 아닌건가요??

  2. 컬렉션 관계에서 inner join으로도 페이징은 불가능 한건가요?

  3. 부모 엔티티가 값 컬렉션 2개를 갖고 해당 컬렉션 fetch 전략을 FetchType.Eager 로 설정해두니 MultipleBagFetchException이 뜨면서 실행조차 안되는걸 발견했는데, 그 이유가 fetch join 2개를 같이 쓸 수 없는것과 같은 이유인가요? 실행조차 안돼서 궁금하네요!

    3가지 질문인데 답변해주시면 감사하겠습니다 :)

답변 1

1

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

순서대로 답변 드릴게요^^

1. 저도 이 상황에 예외를 발생시키지 않는 부분이 의문이기는 합니다. 하지만 결과적으로 데이터에 문제가 발생할 수 있기 때문에 사용하시면 안됩니다.

2. 컬렉션 관계에서 inner join으로도 페이징은 불가능 한건가요?

네 inner outer도 둘다 동일한 원리로 불가능합니다. 한번 테스트 해보시면 더 확실하게 안되는 것을 확인하실 수 있습니다.

3. 네 맞습니다.

감사합니다.

siny7177님의 프로필 이미지
siny7177
질문자

답변 감사드립니다 :)

siny7177님의 프로필 이미지
siny7177

작성한 질문수

질문하기