• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

fetch join 쿼리 질문 드립니당

23.10.31 11:21 작성 조회수 251

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

질문자

2023.11.01

감사합니다!