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
'DEV > Spring Data JPA' 카테고리의 다른 글
JpaRepository를 custom해서 사용하는 방법 (0) | 2023.09.24 |
---|---|
QueryHint를 적용하기 전에 고려해볼 사항 (0) | 2023.09.24 |
Update 쿼리를 호출할 때 주의사항 2가지 (0) | 2023.09.24 |
Page<Entity>를 API의 응답으로 리턴하는 방법 (0) | 2023.09.24 |
Join과 Pagination 함께 사용할 때 Count 쿼리 최적화 (0) | 2023.09.24 |