본문 바로가기

Spring Data JPA

3월 22일 SpringDataJPA EntityGraph (fetch Join)

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생성규칙도 함께 사용하는 예