[JPA] 경로 표현식와 묵시적/명시적 조인

olsohee·2023년 8월 9일
0

JPA

목록 보기
11/21

JPQL에서 사용하는 경로 표현식과 경로 표현식으로 인한 묵시적 조인을 알아보자.

1. 경로 표현식

경로 표현식은 .(점)을 찍어서 객체 그래프를 탐색하는 것이다.

상태 필드

  • 상태 필드는 단순히 값을 저장하기 위한 필드이다.

  • 경로 탐색의 끝으로 더는 탐색할 수 없다.

// JPQL
select m.username, m.age from Member m

// SQL
select m.name, m.age from Member m

단일 값 연관 필드

  • 단일 값 연관 필드는 조회 대상이 엔티티(@ManyToOne, @OneToOne)이다.

  • 묵시적으로 내부 조인이 일어난다.

  • 단일 값 연관 경로는 계속 탐색할 수 있다.

// JPQL
select o.member from Order o

// SQL
select m.*
from Orders o
inner join Member m on o.member_id=m.id
// JPQL
select o.member.team
from Order o
where o.product.name = 'productA' and o.address.city = 'JINJU'

// SQL
select t.*
from Orders o
inner join Member m on o.member_id=m.id
inner join Team t on m.team_id=t.id
inner join Product p on o.product_id=p.id
where p.name='productA' and o.city='JINJU'

컬렉션 값 연관 필드

  • 컬렉션 값 연관 필드는 조회 대상이 컬렉션(@OneToMany, @ManyToMany)이다.

  • 묵시적으로 내부 조인이 일어난다.

  • 더는 탐색할 수 없다. 단 from 절에서 조인을 통해 별칭을 얻으면 별칭으로 추가 탐색이 가능하다.

select t.members from Team t // O

select t.members.username from Team t // X

select m.username from Team t join t.members m // O

2. 경로 탐색시 묵시적 조인의 발생

경로 탐색을 사용하면 묵시적 조인이 발생해서 SQL에서 내부 조인이 발생할 수 있다. 참고로 묵시적 조인은 모두 내부 조인이다.

  • 명시적 조인: join을 직접 작성하는 것

  • 묵시적 조인: 경로 표현식에 의해 묵시적으로 내부 조인이 발생하는 것

조인이 성능 튜닝의 핵심이다. 그런데 묵시적 조인은 조인이 일어나는 상황을 한눈에 파악하기 어렵다. 따라서 성능 튜닝을 용이하게 하기 위해 묵시적 조인보다 명시적 조인을 사용하자.

profile
공부한 것들을 기록합니다.

1개의 댓글

comment-user-thumbnail
2023년 8월 9일

많은 도움이 되었습니다, 감사합니다.

답글 달기