해결된 질문
작성
·
484
0
안녕하세요!
Event와 Member의 N : N 관계를 중간 테이블(EventMEmber)을 만들어서 풀어낼때
Event <-> EventMember <-> Member에서
Event를 리스트로 조회하려고 하는데 이때 EventDto에 Member의 String name 필드를 리스트로 가져오려고 합니다.
1.
@Query("select distinct e from Event e " +
"join fetch e.eventMember a " +
"join fetch a.member")
Event에 중간 엔티티인 EventMember를 fetch join하고 별칭을 사용해서 EventMember의 member를 fetch join 했습니다.
fetch join에서 별칭 사용을 권장하지 않고, 컬렉션을 fetch join을 하면 추후 페이징에 문제가 생길 것 같습니다.
2.
@Query(value =
"select e from EventMember e " +
"join fetch e.member " +
"join fetch e.event")
List<EventMember> eventMembers = eventMemberRepository.findAllEventArtist();
Map<Event, List<String>> events = new HashMap<>();
for (EventMember eventMember : eventMembers) {
if (!events.containsKey(eventMember.getEvent())) {
events.put(eventMember.getEvent(), new ArrayList<>());
}
events.get(eventMember.getEvent())
.add(eventMember.getMember().getName());
}
중간 엔티티인 EventMember로 Event와 Member를 fetch join으로 가져오고 자바 코드로 원하는 응답을 만들었습니다.
혹시 둘중 더 나은 방법이나 더 좋은 방법, 제가 잘못 알고 있는 부분이 있으면 말씀 부탁드리겠습니다 ㅠㅠ
답변 1
1
안녕하세요. code-tree님
지금 필요한 것이 모든 엔티티가 필요한 것이 아니라 회원의 이름 처럼 몇가지 데이터만 필요한 상황으로 보입니다.
이런 경우에는 fetch join을 사용하는 것이 아니라 일반 join + DTO로 원하는 필드를 조회하시면 됩니다.
감사합니다.
답변 감사합니다!!