(추가) 다대다 페이징 질문드립니다!
456
작성한 질문수 19
(이전 질문)
안녕하세요. 이전 질문에 다시 질문 좀 드리고 싶어서 추가 질문 드립니다..ㅠㅠ
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);
이벤트 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 ?
조회한 이벤트로 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 (
? , ? , ?
)
답변 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





