우주먼지
Published 2023. 3. 19. 11:38
JQPL 경로표현식 Database/JPQL

💡 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)문에 영향을 준다.

 

실무 팁

  • 가급적 묵시적 조인보다 명시적 조인을 사용하자.
  • 조인은 쿼리 튜닝에 중요한 포인트이다.
  • 묵시적 조인은 조인이 일어나는 상황을 한눈에 파악하기 어렵다.

'Database > JPQL' 카테고리의 다른 글

JPQL 벌크 연산 & 다형성 쿼리 & Named 쿼리  (0) 2023.03.22
JPQL Fetch Join  (0) 2023.03.19
JPQL Type Query & Sub Query  (0) 2023.03.11
JPQL Paging API & Search Result API  (0) 2023.03.11
JPQL Projection  (0) 2023.03.11
profile

우주먼지

@o귤o

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그