| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 
| 9 | 10 | 11 | 12 | 13 | 14 | 15 | 
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 
| 23 | 24 | 25 | 26 | 27 | 28 | 29 | 
| 30 | 
													Tags
													
											
												
												- MySQL
 - JavaScript
 - 네트워크
 - Proxy
 - design pattern
 - 파이썬
 - spring webflux
 - mongoDB
 - Data Structure
 - react
 - IT
 - Spring
 - 자료구조
 - OS
 - MSA
 - Algorithm
 - C
 - Kafka
 - 알고리즘
 - Galera Cluster
 - 백준
 - c언어
 - 컴퓨터구조
 - 자바
 - 디자인 패턴
 - 운영체제
 - Heap
 - redis
 - JPA
 - Java
 
													Archives
													
											
												
												- Today
 
- Total
 
시냅스
JPA JPQL 경로 표현식과 패치 조인 본문
경로 표현식
- .(점) 을 찍어 객체 그래프를 탐색하는 것
 
select m.username // 상태 필드
from Member m
join m.team t // 단일 값 연관 필드
join m.orders o // 컬렉션 값 연관 필드
where t.name = '팀A'
- 상태 필드 state field 
- 단순히 값을 저장하기 위한 필드
 
 - 연관 필드 association field 
- 연관관계를 위한 필드
 - 단일 값 연관 필드
- @ManyToOne, @OneToOne
 - 대상이 엔티티
 - 묵시적 내부 조인 발생, 탐색이 가능하다.
 - select m.team from member m 에서 m.team.name으로 갈 수 있음
 
 - 컬렉션 값 연관 필드
- @OneToMany, @ManyToMany
 - 대상이 컬렉션
 
 
 - 명시적 조인
- join 키워드 직접 사용
 - select m from Member m join m.team t
 
 - 묵시적 조인
- 경로 표현식에 의해 묵시적으로 Sql 조인 발생 (내부 조인만 가능)
 - select m.team from Member m
 - 사용이 권장되지 않는다.
 - 컬렉션은 경로 탐색의 끝, 명시적 조인을 통해 별칭을 얻어야한다.
 - 경로 탐색은 주로 select, where 절에서 사용하지만 묵시적 조인으로 인해 sql from(join) 절에 영향을 줌
 
 
패치 조인 Fetch Join

- JPQL에서 성능 최적화를 위해 제공하는 기능
- N + 1 문제를 피한다.
 
 - 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회 하는 기능
 - join fetch 명령어 사용
 - 회원을 조회하면서 연관된 팀도 함께 조회
 - jpql
- select m from Member m join fetch m.team
 
 - sql
- select M.*, T.* from member m inner join team t on m.team_id = t.id
 
 - 지연로딩을 셋팅해도 패치 조인의 우선권이 더 높다.
 - 일반 조인은 실행시 연관된 엔티티를 함께 조회하지 않는다.
 - 패치 조인은 즉시로딩 상태로 만든다.
- 객체 그래프를 SQL 한 번에 조회하는 개념
 
 
패치 조인의 한계
- 패치 조인 대상에는 별칭을 줄 수 없다.
 - 둘 이상의 컬렉션은 페치 조인 할 수 없다.
 - 컬렉션을 페치 조인하면 페이징 API를 사용할 수 없다.
- 일대일, 다대일 같은 단일 값 연관 필드들은 페치 조인해도 페이징 가능
 - 하이버네이트는 경고 로그를 남기고 메모리에서 페이징
 
 - 여러 테이블을 조인해서 엔티티가 가진 모양이 아닌 전혀 다른 결과를 내야 하면, 페치 조인 보다는 일반 조인을 사용하고 필요 한 데이터들만 조회해서 DTO로 반환하는 것이 효과적
 
'Java, Spring > JPA' 카테고리의 다른 글
| JPA 값 타입 관련 정리 (0) | 2022.09.17 | 
|---|---|
| JPA 즉시 로딩과 지연 로딩, 영속성 전이와 고아 객체 (0) | 2022.09.17 | 
| JPA 프록시 관련 정리 (0) | 2022.09.17 | 
| JPA MappedSuperclass 정리 (0) | 2022.09.17 | 
| JPA 상속관계 매핑 정리 (0) | 2022.09.17 | 
			  Comments