작성
·
222
·
수정됨
0
안녕하세요. 열심히 강의를 듣고 있는 수강생입니다!
궁금한게 있습니다.
현재 실무에서 사용하고 있는 구조를 좀더 개선시키고 싶어서 열심히 노력중인데요.
현재 상황을 말씀 드리겠습니다.
A, B, C, D 테이블이 있습니다.
각 entitiy 클래스 별로 OneToMany로 A-B, B-C, C-D 이런식으로 Relation이 걸려 있습니다.
현재 기준으로는 각 OneToMany 별로 BatchSize=1000 & FetchType=Eager로 적용이 되어있는데요.
이렇다 보니, A 테이블 조회시 조회된 ID 기준으로 하위 테이블들에 대해서 IN쿼리가 몇개씩 불려지게 됩니다.
그래서 Fetch 조인을 통해서 한번에 가져오는 방식으로 바꿔보려고 개선을 하려고 했는데요.
예를 들면
select a.* from A a
left fetch join a.B b
left fetch join b.C c
left fecth join c.D d
이런식으로 하려고했더니 컴파일 단계에서 MultipleBagFetchException이 발생 하였습니다.
그래서 찾아보니 fecth 조인 사용할 경우에는 oneToMany로 걸리는 대상이 2개 이상이면
위와같은 Exception을 떨군다고 하더라구요..(카티션 곱 이슈로 인한 하이버네이트에서 사전에 미리 막는..)
그래서 결국에는 A-B까지만 Fetch로 빼고 나머지 B-C, C-D는 기존 그대로 Eager 전략으로
기존과 동일하게 조회되도록 조금이나마 개선은 했는데요..
B-C, C-D를 lazy로 바꾸니 N+1이 발생했구요.. N+1해소 하는 방법으로 Fecth조인을 쓰자니
위와같은 Exception이 발생을 하구요..
어떻게 하면 좋을까요.. 도와주세요!
답변 1
0
그렇군요, 현재 절반정도 수강했는데
완강하고 다시 고민 해보겠습니다. 감사합니다.