강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

코린코린님의 프로필 이미지
코린코린

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

주문 조회 V3.1: 엔티티를 DTO로 변환 - 페이징과 한계 돌파

ManyToOne에서 @BatchSize가 동작하지 않습니다 ㅠㅠ

작성

·

606

0

안녕하세요. 항상 좋은 강의, 답변 주셔서 감사합니다.

이번에 여쭤보고 싶은 것은 @BatchSize가 동작하지 않는 부분에 대해서입니다.

<Order의 OrderItems> BatchSize 100 설정

@BatchSize(size = 100)
@OneToMany(mappedBy = "order", fetch = FetchType.LAZY, cascade = CascadeType.ALL) // order가 만들어지면 orderItem이 만들어지기 때문에 영속성 전이한다.
private List<OrderItem> orderItems = new ArrayList<>();

<OrderItems의 Item> BatchSize100 설정

@BatchSize(size = 100)
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "item_id")
private Item item;

위와 같이 설정을 했는데, 실제로 배치가 적용되는 것은 아래 쿼리를 확인하시면 아시겠지만 OrderItems에만 적용이 됩니다. 

 

item는 배치 사이즈가 적용이 되지 않아 총 4번이 나가게 되고, OrderItem은 배치 사이즈가 적용되어 1번의 쿼리만 나갑니다.

 

다른 엔티티에도 적용해보니 정황상 ManyToOne, OneToOne 관계에서 배치 사이즈가 안 먹는거 같은데.. 혹시 item 같은 ManyToOne에는 어떻게 배치 사이즈를 적용하는지 알려주시면 감사하겠습니다

 

참고 :글로벌 배치 사이즈는 잘 먹습니다! 

 

 

 

 

 

 

 

 

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 안상혁님

제가 지금 기억이 정확하지 않은데, 엔티티 자체에 @BatchSize를 걸어보시면 잘 동작할꺼에요.

참고로 실무에서는 글로벌 옵션을 주로 사용합니다.

감사합니다.

코린코린님의 프로필 이미지
코린코린

작성한 질문수

질문하기