[스프링] Entity Graph


OneToMany, ManyToMany의 관계는 디폴트로 Lazy Loading이므로 N+1 문제가 발생 가능

  • 구현 코드 커밋

  • 아래처럼 EntityGraph로 함께 불러올 속성들을 지정해서 N+1 문제 해결이 가능

    @EntityGraph(attributePaths = {"tags", "managers"}, type = EntityGraph.EntityGraphType.FETCH)
      Study findStudyWithTagsByPath(String path);
    

하위 그래프 까지 함께 가져오는 방법 : Subgraph

  • 구현 코드 커밋

  • 1

  • 위와 같은 참조 관계에 있을 때 Enrollment 엔티티에서 Study까지 함께 가져오고 싶으면?

Enrollment
@NamedEntityGraph(
        name = "Enrollment.withEventAndStudyGraph",
        attributeNodes = {
                @NamedAttributeNode(value = "event", subgraph = "withStudy")
        },
        subgraphs = @NamedSubgraph(name = "withStudy", attributeNodes = @NamedAttributeNode("study"))
)
@Entity
@Getter @Setter @EqualsAndHashCode(of = "id")
public class Enrollment {
EnrollmentRepository
public interface EnrollmentRepository extends JpaRepository<Enrollment, Long> {
    @EntityGraph(value = "Enrollment.withEventAndStudyGraph")
    List<Enrollment> findByAccountAndAcceptedOrderByEnrolledAtDesc(Account account, boolean accpeted);
}





© 2020.02. by blupine