본문 바로가기

프로젝트 기록

JPA Paging 삽질 기록

JPA에서의 Fetch join 조건

 

- @~ToOne은 몇 개든 사용 가능

- @~ToMany는 1개만 사용 가능

+) Entity Graph의 경우도 이 조건 동일하게 적용됨.

 

 

 

Paging에서는

 

👉 N+1 해결하겠다고 fetch join, entity graph 잘못 쓰면 MultipleBagFetchException 발생

 

- @~ToOne은 join fetch 사용 가능(QueryDSL의 경우)

  BUT, jpql은 페이징에서는 fetch join 아예 사용 불가능 (Entity Graph는 사용 가능) 👉 페이징 시 QueryDSL 사용 권장!

 

- @~ToMany는 페치 조인 불가능

 

   👉 N+1 해결 방법 : default_batch_fetch_size 적용

   👉또는, QueryDSL으로 쿼리문 작성하되 방향을 반대로 즉, 페치 조인 가능한 @~ToOne으로 조회하면 됨.

 

 

 

 

HHH000104 Warning 해결

 

위 에러는 jpql에서 페이징 시 fetch join, entity graph를 사용하면 나타나는 warning이다.

페이징 조회 시 메모리에서 페이징을 처리하게 된다는 의미로, 데이터가 많은 경우 큰 문제가 발생하게 된다.

따라서, QueryDSL로 페이징 쿼리를 변경하면 이 워닝은 더 이상 뜨지 않게 된다.

 

 

💁‍♀️ 결론 : Paging은 QueryDSL 사용하자.

'프로젝트 기록' 카테고리의 다른 글

SpringBoot Dockerize 기록  (0) 2022.02.23
MobaXterm을 통한 배포 기록  (0) 2022.02.23
Entity type으로 Wrapper class를 사용하는 이유  (0) 2022.02.23
정적 팩토리 메서드  (0) 2022.02.23
Thread Local이란?  (0) 2022.02.23