- Comment 조회 - 1번
- Comment의 갯수(각 Comment가 가지고 있는 Board 조회) - N번
이렇게 하면 N+1번의 쿼리가 발생하는 것
@ManyToOne 속성에 fetch 속성으로 LAZY를 주면 된다public class Comment {
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "thread_id")
Board thread;
}
EAGER와 똑같지만, EAGER의 경우에는 N+1 쿼리가 발생하지만 Fetch Join의 경우에는 한번이 쿼리문으로 해결이 가능@Query 어노테이션을 이용하여 JPQL를 생성할 수 있다join fetch 뒤에 연관된 엔티티나 컬렉션을 적어주면 된다public interface CommentRepository extends JpaRepository<Comment, Long> {
@Query("select c from Comment c join fetch c.board")
List<Comment> findAll();
}
@EntityGraph도 마찬가지로 EntityGraph 상에 있는 Entity들의 연관관계 속에서 필요한 엔티티와 컬렉션을 함께 조회하려고 할때 사용@EntityGraph 어노테이션을 달고 옵션을 준다attributePaths는 같이 조회할 연관 엔티티명을 적으면 된다.type은 EntityGraphType.LOAD, EntityGraphType.FETCH 2가지LOADFETCH public interface CommentRepository extends JpaRepository<Comment, Long> {
@EntityGraph(attributePaths = {"thread"}, type = EntityGraph.EntityGraphType.LOAD)
List<Comment> findAll();
}