코드 그라데이션

경로 표현식 본문

Database/JPQL

경로 표현식

완벽한 장면 2023. 9. 1. 11:54

경로 표현식

 

예시

상태 필드 

String query =  "select m.username From Member m";

 

단일 값 연관 경로 

String query = "select m.team.~~ From Member m";

이게 m.team.username / m.team.id  뭐 요런식으로 한 번 더 들어갈 수 있다는 의미.

 

묵시적 내부 조인이 발생한다는 말이 무슨 뜻이냐면.

 

-> 객체에서는 .(점)을 찍어서 하면 되지만 DB에서는 조인이 일어나야 한다.

그게 묵시적 내부 조인이라고 칭해짐.

굉장히 조심해서 써야한다. 

실무하는 사람들은 직관적으로 조심해야 함을 안다. 성능 튜닝에 매우 지대한 영향을 준다.

웬만하면 JPQL과 SQL을 맞춰라.

 

 

 

컬렉션 값 연관 경로

 

String query = "select t.members from Team t";

members는 Team과 연관관계 맺어져 있었던 컬렉션<List> 이다.

일대다 관계이므로, 묵시적 내부조인이 발생하긴 하지만, 여러 개 있는 것 중에서 어떤 걸 가져와야 하는지 특정할 수가 없으므로, 탐색을 하지 않는다는 이야기.

컬렉션에서 . 찍어서 할 수 있는 것은 거의 .size가 유일.

 

그래서 명시적 조인을 하라는 게 뭐냐면

Select query =  "select m From Team t join t.members m";

이렇게 하면 앞에 m 에서 m.username 뭐 요런 식으로 할 수 있게 된다는 뜻.

 

정리하자면 그냥 묵시적 조인 쓰지 말자.

 

 

외부 조인 하고싶으면 명시적 조인 하면 된다.

 


경로 표현식 용어 정리

 

 

상태 필드 경로 탐색

 

 

단일 값 연관 경로 탐색

 

 

명시적 조인, 묵시적 조인

 

 

경로 표현식 예시

 

경로 탐색을 사용한 묵시적 조인 시 주의사항

 

 

실무 조언

 

 

 

 

 

728x90

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

fetch join (페치 조인) (2) 컬렉션 페치 조인, DISTINCT  (0) 2023.09.02
fetch join (페치 조인) (1) 기본  (0) 2023.09.02
JPQL 함수들  (0) 2023.09.01
조건식  (0) 2023.08.31
JPQL 타입 표현  (0) 2023.08.31
Comments