일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- spring webflux
- 알고리즘
- OS
- Spring
- Data Structure
- 백준
- react
- 운영체제
- MySQL
- Algorithm
- 자바
- redis
- c언어
- C
- JPA
- 파이썬
- 네트워크
- 디자인 패턴
- design pattern
- 컴퓨터구조
- Heap
- JavaScript
- Galera Cluster
- Proxy
- IT
- Java
- mongoDB
- Kafka
- MSA
- 자료구조
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