경로 표현식은 정말 어려웠다.
단일 값이랑 컬렉션 값이 뭐가 다른지도 이해가 잘 안됐다.
이에 내가 이해한 내용을 바탕으로 나의 언어로 정리해 남기겠다.
경로 표현식이라고 말은 거창하지만 실상은 Java 개발자라면 당연히 써봤을 .(점)이다.
점 찍고 하위로 들어가는걸 그냥 어려운 말로 경로 표현식이라고 말한다.
select m.username -> 상태 필드
from Member m
join m.team t -> 단일 값 연관 필드
join m.orders o -> 컬렉션 값 연관 필드
where t.name = '팀A'
- 상태 필드 : 단순 값 저장하는 필드 (m.username)
- 경로 탐색의 끝, 더 이상 하위로 탐색하지 않음.
- 연관 필드 : 연관 관계를 위한 필드
- 단일 값: 다대일 관계의 엔티티 (하나)
- m.team 멤버 여럿에 팀 하나 = 멤버에서 팀 하나 조회
- 묵시적 내부 조인 발생. 하위 탐색함.
- m.team.name 하위 탐색 가능.
- 컬렉션 값: 일대다 관계의 엔티티 (여러 객체)
- m.orders 멤버 하나에 여러 오더 = 멤버에서 오더 여럿 조회
- 묵시적 내부 조인 발생. 하위 탐색 안함.
- m.orders.itemName 하위 탐색 불가능
- -> 하려면 from절에서 명시적 조인을 통해 별칭을 얻어야 함. join m.orders o -> o.itemName 가능
- 단일 값: 다대일 관계의 엔티티 (하나)
묵시적 내부 조인 vs 명시적 내부 조인
명시적 내부 조인은 join 키워드를 사용해서 조인하는 것이고,
묵시적 내부 조인은 m.team.getName() 같은 상황에서 jpa가 자동으로(묵시적으로) 조인하는 것.
가급적 명시적 조인 사용할 것.
조인은 SQL 튜닝에 중요한 포인트인데,
묵시적 조인은 조인이 일어나는 상황을 한눈에 파악하기 어렵다.
'Spring > 이론' 카테고리의 다른 글
동적 쿼리 VS 정적 쿼리 차이, 예시 (0) | 2023.09.06 |
---|---|
[JPA] JPQL fetch join 페치 조인 (0) | 2023.08.02 |
[JPA] JPQL 문법과 기능 (0) | 2023.07.26 |
JPA - 값 타입 (0) | 2023.07.07 |
Spring Security 동작 원리 / 필터 순서 (0) | 2023.07.05 |