DEV/Spring Data JPA

@EntityGraph로 fetch join 쉽게 쓰기

행운개발자 2023. 9. 24. 20:26
728x90

@ManyToOne, @OneToOne을 사용할 때는 몇 가지 정해진 규칙이 있습니다.

 

1. 불필요한 JOIN과 조회가 연속적으로 일어나는 것을 막기 위해 fetchType.LAZY 사용한다.
2. fetchType.LAZY로 인한 N+1 문제를 해결하기 위해 fetch join을 사용한다

 

 쿼리를 작성하다보면 간단한 fetch join을 매번 @Query를 사용해서 JPQL을 직접 작성하기 번거로울 때가 있습니다.

이럴 때는 fetch join을 간단하게 적용하게 도와주는 @EntityGraph를 사용할 수 있습니다.

@Repository
public interface MemberJpaRepository extends JpaRepository<Member, Long> {

    @Override
//    @Query("select m from Member m left join fetch m.team")
    @EntityGraph(attributePaths = {"team"})
    List<Member> findAll();
}

복잡한 쿼리를 정적 쿼리를 작성해야할 때에는 Jpql을 직접 작성해야겠지만, 내부 메커니즘을 잘 알고 있을 때에는 간편하게 적용할 수 있는 방법입니다.

728x90