본문 바로가기
JPA

[Spring Data JPA] @EntityGraph

by 감자b 2024. 12. 30.

@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