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

olsohee·2023년 8월 9일
0

JPA

목록 보기
11/21
post-custom-banner

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
공부한 것들을 기록합니다.
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 8월 9일

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

답글 달기