📦 Database/JPQL
JPQL 경로 표현식
신건우
2023. 4. 16. 01:12
💡 JPQL 경로표현식
.(점)을 찍어 객체 그래프를 탐색하는 것
select m.username // 상태 필드
from Member m
join m.team t // 단일 값 연관 필드
join m.orders o // 컬렉션 값 연관 필드
where t.name = 'teamA';
상태 필드
- 단순히 값을 저장하기 위한 필드
연관 필드
- 연관관계를 위한 필드
- 단일 값 연관 필드 : 대상이 Entity이다. (N:1, 1:1)
- 컬렉션 값 연관 필드 : 대상이 Collection이다. (1:N, N:M)
특징
묵시적 내부 조인이 발생하는 단일 값 연관 경로, 컬렉션 값 연관 경로는 조심해서 사용해야 한다.
내부적으로 inner join문이 나가기 때문에 쿼리튜닝이 어렵기 때문에,
왠만하면 명시적 조인을 사용하는것이 가장 좋다.
상태필드
- 경로 탐색의 끝으로 오면 , 탐색을 더 이상 못한다.
단일 값 연관 경로
- 묵시적 내부 조인(inner join) 발생, 객체 그래프 탐색이 가능하다.
컬렉션 값 연관 경로
- 묵시적 내부 조인(inner join) 발생, 그래프 탐색이 불가능하므로 명시적 조인을 사용해야한다.
- From문에서 명시적 조인을 통해 별칭을 얻으면 별칭을 통해 탐색 가능
// 그래프 탐색 불가능한 쿼리
String query = "select t.members from Team t";
// Alias 부여를 통해 명시적 조인을 사용하면 그래프 탐색이 가능하다.
String query = "select m from Team t join t.members m";
묵시적 조인 시 주의사항
- 항상 내부 조인으로 동작한다.
- 컬렉션은 경로 탐색의 끝, 명시적 조인을 통해 Alias를 얻어야 더 탐색이 가능하다.
- 경로 탐색은 주로 Select, Where에서 사용하지만,
묵시적 조인으로 인해 SQL의 From(Join)문에 영향을 준다.
실무 팁
- 가급적 묵시적 조인보다 명시적 조인을 사용하자.
- 조인은 쿼리 튜닝에 중요한 포인트이다.
- 묵시적 조인은 조인이 일어나는 상황을 한눈에 파악하기 어렵다.