[스프링] Entity Graph
OneToMany, ManyToMany의 관계는 디폴트로 Lazy Loading이므로 N+1 문제가 발생 가능
아래처럼 EntityGraph로 함께 불러올 속성들을 지정해서 N+1 문제 해결이 가능
@EntityGraph(attributePaths = {"tags", "managers"}, type = EntityGraph.EntityGraphType.FETCH) Study findStudyWithTagsByPath(String path);
하위 그래프 까지 함께 가져오는 방법 : Subgraph
위와 같은 참조 관계에 있을 때
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);
}