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

rr8602님의 프로필 이미지
rr8602

작성한 질문수

실전! 스프링 데이터 JPA

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

fetch join 쿼리 질문 드립니당

작성

·

358

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]

 

페이징 처리를 하다가 갑자기 궁금해서(이전에 배웠는데 까먹은걸지도..모르겠네요)

 

<질문> : @Query에서 페치 조인으로 팀을 가져왔는데, Team 엔티티에 있는 List<Members> members의 값은 왜 결과 쿼리에서 조회가 되지 않았는지 궁금합니다.

패치조인을 하게 되면 member와 team의 모든 필드 값을 다 select 하게 되는거 아니였나요'? 맞다면 리스트 members도 가져와야 된다고 생각하는데 왜 안되는지 궁금하고, 가져올 수 있는 방법이 따로 있는 건지도 궁금합니다.

 

@Query(value = "select m from Member m left join fetch m.team t",
countQuery = "select count(m) from Member m")
Page<Member> findByAge(int age, Pageable pageable);

 

 

@Test
public void paging(){
//given
memberRepository.s
ave(new Member("member1", 10));
memberRepository.
save(new Member("member2", 10));
memberRepository
.save(new Member("member3", 10));
memberRepositor
y.save(new Member("member4", 10));
memberReposito
ry.save(new Member("member5", 10));
memberReposit
ory.save(new Member("member6", 10));

int age = 10;
PageRequest pageRequest = PageRequest.of(0, 3, Sort.by(Sort.Direction.DESC, "username"));

//when
Page<Member> page = memberRepository.findByAge(age, pageRequest); // PageRequest의 부모 인터페이스가 Page

 

 

package study.datajpa.entity;

import jakarta.persistence.*;
import lombok.*;

import java.util.ArrayList;
import java.util.List;

import static lombok.AccessLevel.PROTECTED;

@Entity
@Getter @Setter
@NoArgsConstructor(access = PROTECTED)
@ToString(of = {"id", "name"})
public class Team {

@Id @GeneratedValue
@Column(name = "team_id")
private Long id;
private String name;

@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<>();

public Team(String name) {
this.name = name;
}
}

 


답변 1

0

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

안녕하세요. rr8602님

fetch join의 경우 fetch join 방향으로 초기화가 진행됩니다.

member -> team으로는 초기화가 되었지만 team -> member 방향으로는 초기화가 진행되지 않습니다.

감사합니다.

rr8602님의 프로필 이미지
rr8602
질문자

감사합니다!

rr8602님의 프로필 이미지
rr8602

작성한 질문수

질문하기