티스토리 뷰
728x90
반응형
JPA를 사용하다 보면 LAZY로딩에 의해서 더 많은 쿼리가 나가는 경우가 발생한다.
쿼리를 보낼 때 연관된 내용을 바로 찾지 않고 필요할때 다시 쿼리를 보내서 찾는 LAZY 방식을 사용하여 N+1 쿼리 문제가 발생하게 된다.
ToOne에 관계는 fetch join을 사용하여 한번에 값들을 모두 조회할 수 있지만 ToMany 같은 컬렉션 조회는 한개는 상관없지만 여러개를 fetch join을 걸게되면 MultipleBagFetchException 에러가 나게된다.
properties설정에 하이버네이트의 default_batch_fetch_size 글로벌 옵션을 걸거나 필요한 엔티티에 어노테이션 @BatchSize를 붙이면 된다.
이 옵션은 설정한 size만큼 in절로 묶어서 한번에 가져오기 때문에 쿼리를 줄일 수 있다.
그리고 컬렉션에 fetch join을 쓰면 페이징 처리가 불가능 하지만 이 방식은 페이징 처리가 가능하다.
max size는 1000으로 하는게 적당하다.
Reference
반응형
'Programming > Springboot' 카테고리의 다른 글
[Springboot] 자바 ORM 표준 JPA 프로그래밍 - 3 (0) | 2021.04.16 |
---|---|
[Springboot] 자바 ORM 표준 JPA 프로그래밍 - 2 (0) | 2021.04.11 |
[Springboot] 자바 ORM 표준 JPA 프로그래밍 - 1 (0) | 2021.04.08 |
[Springboot] Spring 헷갈리는 내용 (21.03.25) (0) | 2021.03.25 |
댓글