inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링 데이터 JPA

스프링 데이터 JPA 페이징과 정렬

(추가) 다대다 페이징 질문드립니다!

456

code-tree

작성한 질문수 19

0

(이전 질문)

https://www.inflearn.com/questions/718059/%EC%97%AC%EB%9F%AC-%ED%85%8C%EC%9D%B4%EB%B8%94-fetch-join-%EC%A7%88%EB%AC%B8-%EB%93%9C%EB%A6%BD%EB%8B%88%EB%8B%A4

 


안녕하세요. 이전 질문에 다시 질문 좀 드리고 싶어서 추가 질문 드립니다..ㅠㅠ

 

1)

이전 질문에서 다대다 관계(Event <-> EventArtist<-> Artist)에서 이벤트 리스트를 가져올때 이벤트에 포함된 아티스트의 이름 정도만 가져와야 되면 fetch join 하는 것보다 join + dto로 해결하는 방법을 추천해주셨습니다.

그런데 하나의 이벤트를 조회하는 경우 아티스트의 이름 리스트는 join + dto로 해결할 수 있는데 이벤트를 리스트로 가져오는 경우에도 말씀해주신 join + dto로 가져올 수 있을까요??

 

2)

그리고 이벤트를 페이징 처리를 하려고 하니 컬렉션을 페이징하면 인메모리를 사용해서 위험하고 중간 엔티티로 페이징을 하면 이벤트가 기준이 아니어서 제대로 페이징이 안 되었습니다.

그래서 이벤트를 Batch Size로 먼저 조회를 하고 List<Event>를 중간 엔티티 EventArtist에 넘겨서 In 쿼리로 조회를 했습니다. (이벤트를 batch size로 조회만 하면 아티스트에 접근할때 N + 1 쿼리 발생)

 

혹시 이 방법에 대한 피드백도 좀 주시면 정말 감사하겠습니다..!

서비스 코드

// event 리스트를 먼저 조회 (batch size)
List<Event> events = eventRepository.findEvents(lastIndex, PageRequest.of(0, 3));
// fetch join + in 쿼리
List<EventArtist> eventArtists = eventArtistRepository.findEventArtists(events);

 

  1. 이벤트 batch size로 페이징 조회

@Query("select e from Event e " +
        "where e.id >= :lastIndex")
List<Event> findEvents(@Param("lastIndex") Long lastIndex, Pageable pageable);

결과 (간단하게 수정)

select

event.*

from

events event

where

event_id>=? limit ?

 


 

  1. 조회한 이벤트로 join fetch + in 쿼리를 해서 아티스트 조회

@Query("select ea from EventArtist ea " +
        "join fetch ea.artist " +
        "where ea.event in :events")
List<EventArtist> findEventArtists(@Param("events") List<Event> events);

 

결과 (간단하게 수정)

select

event_artist.*,

artist.*

from

event_artists event_artist

inner join

artists artist

on event_artist.artist_id = artist_id

where

event_artist.event_id in (

? , ? , ?

)

 

spring-boot java spring JPA

답변 1

0

김영한

안녕하세요. code-tree님

다음 강의에 궁금해하시는 내용들을 설명하고 있습니다. 다음 강의를 복습해주세요.

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

감사합니다.

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

75

1

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

108

3

MemberRepository 구현체

0

58

1

pdf 표현 질문드립니다.

0

63

1

로그가 남지 않는 문제.

0

83

1

테스트 라이브러리가 강의는 junit4가 맞나요??

0

72

2

pdf 파일과 차이점이 있는 것같은데 문제 없나요?

0

73

2

@PrePersist, @PreUpdate 호출 시점 질문드립니다.

0

94

2

Sort 인터페이스는 잘 사용 안하나요?

0

52

1

스캔대상 질문드립니다.

0

46

1

하이버네이트6에서의 최적화에 이은 질문

0

86

1

save() vs saveAndFlush DB 통신 횟수

0

54

1

순수 JPA 리포지토리 코드 수정부분

0

86

2

bulk연산 후 flush하는 이유를 모르겠어요

0

152

3

bulk insert 질문입니다.

0

179

2

교만했던 것 같아요.

0

147

1

RESTful 강의는 안하시는 건지 궁금합니다.

0

149

2

동적 테이블에 대한 질문

0

86

1

영속성 전이와 연관관계

0

131

2

강의 10:25 질문

0

75

1

단건 update 질문

0

98

2

엔티티 와 도메인의 경계

0

127

1

UsernameOnlyDto 타입 type mismatch 오류

0

122

1

Projection 개념과 데이터 전달과정에 대해 질문 있습니다.

0

136

1