@EntityGraph
해당 애노테이션은 JPA에서 연관관계가 있는 엔티티를 조회 시 fetch join으로 한 번에 로드할 수 있도록 한다.
일반적으로 jpql을 사용하면 fetch join을 아래와 같이 사용할 수 있다.
@Query("select m from Member m left join fetch m.team")
List<Member> findMemberFetchJoin();
Spring Data JPA는 @EntityGraph 애노테이션은 통해 JPQL 없이 Fetch join이 가능하도록 할 수 있다.
LEFT OUTER JOIN을 사용하며, attributePaths = {”함께 로드할 연관된 엔티티”} 처럼 사용한다.
// JPA가 지원하는 공통 메서드와 함께 사용
@Override
@EntityGraph(attributePaths = {"team"})
List<Member> findAll();
// JPQL과 함께 사용
@EntityGraph(attributePaths = {"team"})
@Query("select m from Member m")
List<Member> findMemberEntityGraph();
// 쿼리 메서드와 함께 사용
@EntityGraph(attributePaths = {"team"})
List<Member> findByUsername(String username)
@NamedEntityGraph
Entity에 해당 애노테이션을 추가, 이름을 정의하고 Repository 메서드에 @EntityGraph에 정의한 이름을 명시한다.
@NamedEntityGraph(name = "Member.all", attributeNodes = @NamedAttributeNode("team"))
@Entity
public class Member {
...
}
@EntityGraph("Member.all")
@Query("select m from Member m")
List<Member> findMemberEntityGraph();
참고
실전! 스프링 데이터 JPA 강의 | 김영한 - 인프런
김영한 | 스프링 데이터 JPA는 기존의 한계를 넘어 마치 마법처럼 리포지토리에 구현 클래스 없이 인터페이스만으로 개발을 완료할 수 있습니다. 그리고 반복 개발해온 기본 CRUD 기능도 모두 제
www.inflearn.com
'JPA' 카테고리의 다른 글
[Spring Data JPA] 도메인 클래스 컨버터 (0) | 2024.12.30 |
---|---|
[Spring Data JPA] Auditing (0) | 2024.12.30 |
[Spring Data JPA] @Modifying (0) | 2024.12.30 |
[Spring Data JPA] Page, Slice (1) | 2024.12.29 |
[JPA] OSIV(Open Session In View) (1) | 2024.12.29 |