해결된 질문
작성
·
207
3
컬렉션 inner join 시에도 데이터가 변하는 걸 실습으로 확인해봤습니다. 그 후 inner join 2번 사용 시MultipleBagFetchException를 발생시키는지 궁금해서 테스트 해보니 따로 발생시키지 않더라구요!
영한님 책이 따로 있어서 확인해봤는데, 책에서는 fetch join 2개는 컬렉션 * 컬렉션 곱이 만들어지므로 주의해야하고, 하이버네이트 구현체의 경우 MultipleBagFetchException을 발생시킨다고 나와있는데, inner join은 MultipleBagFetchException을 발생시키지 않는 건가요? 같은이유로 데이터 중복값이 크게 증가해 발생해야하는게 아닌가 해서 질문드립니다! 왜 inner join은 하이버네이트가 막아두지 않은 것일까요?
inner join이 2번 이상 사용이 가능한걸 보면 둘 이상의 컬렉션에 fetch join 을 막아둔 가장 큰 이유가 데이터 중복이 아닌건가요??
컬렉션 관계에서 inner join으로도 페이징은 불가능 한건가요?
부모 엔티티가 값 컬렉션 2개를 갖고 해당 컬렉션 fetch 전략을 FetchType.Eager 로 설정해두니 MultipleBagFetchException이 뜨면서 실행조차 안되는걸 발견했는데, 그 이유가 fetch join 2개를 같이 쓸 수 없는것과 같은 이유인가요? 실행조차 안돼서 궁금하네요!
3가지 질문인데 답변해주시면 감사하겠습니다 :)
답변 1
1
순서대로 답변 드릴게요^^
1. 저도 이 상황에 예외를 발생시키지 않는 부분이 의문이기는 합니다. 하지만 결과적으로 데이터에 문제가 발생할 수 있기 때문에 사용하시면 안됩니다.
2. 컬렉션 관계에서 inner join으로도 페이징은 불가능 한건가요?
네 inner outer도 둘다 동일한 원리로 불가능합니다. 한번 테스트 해보시면 더 확실하게 안되는 것을 확인하실 수 있습니다.
3. 네 맞습니다.
감사합니다.
답변 감사드립니다 :)