JPA를 통해 in clause를 쉽게 사용할 수 있습니다.
아래처럼 in을 통해 한 개의 쿼리만 수행됩니다.
List<Worker> findByIdIn(List<Integer> ids);
select .... from Worker where id in (? ,? ,?)
여기서 문제는 ids가 고정된 크기의 객체가 아니라는 점입니다.
한번에 16개를 할당해 결과를 얻고 싶을때 너무 많은 데이터를 대비해 5개씩 짤라서 조회했다고 가정했을때, 여러 가지의 SQL이 생성되고 호출이 됩니다.
JDBC에는 PreparedStatement 객체가 있는데 이 객체는 이미 생성된 SQL문을 활용해 지속해서 재사용을 통해 좋은 성능을 얻을 수 있도록 하는 객체입니다.
in절을 통해 생성하다보면 호출마다 다른 SQL이 호출되고 저장되어 위의 장점을 활용하지 못하게 되고, query가 hibernate에 지속적으로 쌓이게 되어 힙 메모리를 점유하게 됩니다.
'스프링 부트 > JPA' 카테고리의 다른 글
[스프링] AOP와 JPA 트랜잭션 동작 방식 (0) | 2022.11.01 |
---|---|
[스프링] Hibernate란 (0) | 2022.10.08 |
[스프링] @Query에 ENUM 타입 쓰는 법 (0) | 2022.08.25 |
@NotNull, @NotEmpty, @NotBlank 차이 (0) | 2022.02.19 |
스프링 부분 수정 쿼리 @DynamicUpdate (1) | 2022.02.18 |
댓글