
N+1 문제
Team teamA = new Team("teamA");
Team teamB = new Team("teamB");
teamRepository.save(teamA);
teamRepository.save(teamB);
Member member1 = new Member("user1" , 10, teamA);
Member member2 = new Member("user2" , 20, teamB);
memberRepository.save(member1);
memberRepository.save(member2);
em.flush();
em.clear();
List<Member> members = memberRepository.findAll();
for (Member member : members) {
System.out.println(member.getTeam().getName());
}
JPQL 패치 조인
@Query("select m from Member m join fetch m.team")
public List<Member> findMemberFetchJoin();
List<Member> members2 = memberRepository.findMemberFetchJoin();
for (Member member : members2) {
System.out.println(member.getTeam().getName());
}
@EntityGraph
- 사실상 페치 조인(FETCH JOIN)의 간편 버전
- LEFT OUTER JOIN 사용
@Override @EntityGraph(attributePaths = {"team"})
List<Member> findAll();
@EntityGraph(attributePaths = {"team"})
@Query("select m from Member m")
List<Member> findMemberEntityGraph();
@EntityGraph(attributePaths = {"team"})
List<Member> findByUsername(String username)
NamedEntityGraph
@NamedEntityGraph(name = "Member.all", attributeNodes = @NamedAttributeNode("team"))
@Entity public class Member {}
@EntityGraph("Member.all")
@Query("select m from Member m")
List<Member> findMemberEntityGraph();