페치 조인 사용법
JOIN FETCH
구문으로 연관 엔티티를 즉시 로딩
- JPQL은 연관 엔티티를 단순한 조인이 아니라
- 즉시 로딩할 엔티티로 처리함
@Test
void testFetchJoin() {
String jpql = "select m from Member m join fetch m.teams";
List<Member> resultList = em.createQuery(jpql, Member.class)
.getResultList();
System.out.println("resultList = " + resultList);
}
- 페치 조인으로 팀을 조회한 경우
- 팀 엔티티는 프록시 객체가 아니라
- 실제 엔티티임.
- 지연로딩이 발생하지 않는 것임.
장점
- 성능의 최적화
- 페치 조인을 사용시 필요한 엔티티를 미리 로딩할 수 있음
- 나중에 엔티티 접근시 추가적인 쿼리를 줄일 수 있음
- N+1 문제의 해결
- 연관된 엔티티를 조회시에 미리 들고오기 때문에, 나중에 각 연관된 엔티티를 로딩하기 위해 발생하는 N+1 쿼리의 문제를 방지가능하다.
단점
- 페치 조인인 연관된 엔티티를 모두 메모리에 로드함.
- 연관 데이터가 많으면 메모리의 사용량이 급증
- 사용시 성능, 메모리 사용 상충관계를 고려해야함
- 엔티티 전체를 로딩하기에..
- 선택적인 로딩이 필요한 경우 DTO를 사용해 프로젝션 쿼리를 고려해야함
- 프로젝션 쿼리?
- 말이 있어 보이는거지
- 그냥 필요한 필드만 들고와서
- select 해주는 것임
Uploaded by N2T
'자바 > JPA' 카테고리의 다른 글
[JPA] 집합 함수 (0) | 2023.11.09 |
---|---|
[JPA] JPQL 조인 (0) | 2023.11.09 |
[JPA] 컬렉션 페치 조인 (0) | 2023.11.09 |
[JPA] 페치 조인과 일반 조인의 차이점 (0) | 2023.11.09 |
[JPA] __**@AttributeOverride: 속성 재정의**__ (0) | 2023.11.09 |