Fetch join?
패치 조인은 영속성 관리대상인 엔티티 객체를 호출할때 해당 엔티티객체가 관계맺고 있는 대상까지 다 조회를 한다. 이때 예를 들어 아래와 같이 조회를 한다고 가정해 보자
select m from member m
위와 같은 쿼리를 jpql로 날렸을때 실제로 하이버네이트에서 보내는 쿼리는 member 내부에 관계를 맺고있는 다른 엔티티를 조회하는 쿼리까지 함께 보낸다
연관관계를 맺고 있는 엔티티까지 다 들고오는건 orm의 강점 이긴하나 이때 발생하는 문제가 바로 연관관계를 맺고 있는 엔티티의 수만큼 select 쿼리가 나가는 것이다.
그말은 즉 io가 많아진다는 것이고 때에따라선 성능저하의 원인이 될 수도 있다.
이를 해결하는 방법중 하나가 fetch 조인이다.
JPQL fetch join
@Query("select m from Member m join fetch m.team")
List<Member> findMemberFetchJoin();
쿼리메소드 fetch 조인 적용
@EntityGraph(attributePaths = {"team"})
List<Member> findEntityGraphByUsername(@Param("username") String username);
attributePaths에 값으로 연관관계를 맺고있는 엔티티에 필드명을 넣어준다.
위 방법 외에 방법들
- nativeQuery를 사용한다.
- projection을 사용한다.
'Springboot' 카테고리의 다른 글
spring data JPA @Modifying (0) | 2023.08.17 |
---|---|
SpringSecurity 에서 WebSecurityConfigurerAdapter 가 deprecated됐다... (0) | 2023.08.17 |
[JPA] @GeneratedValue의 Auto_increment 미적용 될때 (0) | 2023.08.17 |
SpringBoot/java POI 이용해서 엑샐 생성하기 (0) | 2023.08.17 |
Spring boot Static 필드에 @Value 사용 (0) | 2023.08.16 |