EntityGraph
//EntityGraph 는 @Query에서 fetch Join 을 사용할 때 사용
*fetch join을 필수적으로 알아야 한다.
fetch = fetchType.LAZY
최초 호출시 proxy값을 가져오고 그 값에 접근할때 지연로딩을 수행하는것
지연로딩이 일어나는걸 n+1문제라 한다.
이 n+1문제를 fetch join으로 해결한다.
fetch join은 해당 엔티티에 지연로딩 필드들을 즉시로딩으로 다 가져온다,
연관관계에 필드를 객체그래프라 한다
간단한 fetch join은 데이터 JPA를 사용 , 복잡하면 JPQL을 사용
ex)
@override
@EntityGraph(attributePaths = {"team"}) //fetch join 할 필드값을 넣어준다.
List<Member> findAll();
@EntitiyGraph(attributePaths = {"team"})
@Query("select m from Member m")
List<Member> findMemberEntityGreph();
//JPQL 과 @EntitiyManager를 함께 사용할 경우
//아래는 namedQuery를 사용할 경우
<Member>
@NamedEntityGraph (name = "Member.all" attributeNodes("team"))
List<Member> findByUsername(@Param("username") String username)
//메소드 생성규칙과 함께 사용
//DataJpa외 name생성규칙도 함께 사용하는 예
'Spring Data JPA' 카테고리의 다른 글
| 3월 23일 SpringDataJPA 사용자 정의 리포지토리 구현 (0) | 2023.03.23 |
|---|---|
| 3월 22일 SpringDataJPA hint & lock (0) | 2023.03.22 |
| 3월 22일 SpringDataJPA 벌크성 수정 쿼리 (1) | 2023.03.22 |
| 3월 22일 SpringDataJPA 페이징과 정렬 (0) | 2023.03.22 |
| 3월 21일 SpringDataJPA 반환타입 (0) | 2023.03.21 |