본 포스팅은 인프런 - 자바 ORM 표준 JPA 프로그래밍 (기본편) 을 강의를 바탕으로 공부하고 정리한 글입니다.
경로 표현식
경로 표현식은 .(점)을 찍어 객체 그래프를 탐색하는 것이다.
- 상태 필드(static field) : 단순히 값을 저장하기 위한 필드
- 연관 필드(association field) : 연관관계를 위한 필드
- 단일 값 연관 필드 : @ManyToOne, @OneToOne, 대상이 엔티티
- 컬렉션 값 연관 필드 : @OneToMany, @ManyToMany, 대상이 컬렉션
특징
- 상태 필드 : 경로 탐색의 끝이며, 더이상 탐색이 불가능하다.
String query = "select m.username, m.age from Member m";
- 단일 값 연관 필드 : 묵시적 내부 조인이 발생하며, 탐색을 더 할 수 있다.
String query = "select m.team from Member m";
이 경우 m.team.name으로 탐색이 더 가능하다.
- 컬렉션 값 연관 필드 : 묵시적 내부 조인이 발생하며, 더이상 탐색이 불가능하다.
String query = "select t.members from Team t";
이 경우 t.members.username으로 탐색이 불가능하다.
하지만 FROM 절에서 명시적 조인을 통해 별칭을 얻으면 별칭을 통해서 탐색이 가능하다.
String query = "select m.username from Team t join t.members m";
실무에서는 묵시적 조인은 사용하지 않는 것을 권장한다.
명시적 조인을 사용해야 쿼리 튜닝하기 쉽고, 묵시적 조인을 사용할 경우 에러사항이 많이 발생할 수 있다.
명시적 조인, 묵시적 조인
- 명시적 조인 : join 키워드를 직접 사용
- 묵시적 조인 : 경로 표현식에 의해 묵시적으로 SQL 조인이 발생 (내부 조인만 가능)
/* 명시적 조인 */
select m from Member m join m.team t
/* 묵시적 조인 */
select m.team from Member m
경로 탐색을 사용한 묵시적 조인 시 주의사항
- 항상 내부 조인을 사용한다.
- 컬렉션은 경로 탐색의 끝으로, 컬렉션을 더 탐색하려면 명시적 조인을 통해 별칭을 얻어야 한다.
- 경로 탐색은 주로 SELECT, WHERE 절에서 사용하지만 묵시적 조인으로 인해 SQL의 FROM (JOIN) 절에 영향을 준다.
- 조인은 SQL 튜닝에 중요한 포인트인데, 묵시적 조인은 조인이 일어나는 상황을 한눈에 파악하기 어렵기 때문에 튜닝이 어렵다.
- 따라서 실무에서는 묵시적 조인은 사용하지 말고, 명시적 조인만 사용하는 것을 권장한다.
'🌱 Spring > JPA' 카테고리의 다른 글
[JPA] JPA 설정 총 정리 : ddl-auto 옵션, 실행 쿼리 보기(SpringBoot 3.x 버전 변경 추가) (1) | 2023.04.19 |
---|---|
[JPA] Auditing 기능을 사용해 공통 칼럼(등록일, 수정일 등) 관리하기 (0) | 2023.04.03 |
[JPA] OSIV (0) | 2022.12.27 |
[JPA] JPQL : 서브 쿼리 (0) | 2022.11.06 |
[JPA] JPQL : 조인 (0) | 2022.11.04 |
[JPA] JPQL : 페이징 (0) | 2022.11.03 |
[JPA] JPQL : 기본 문법 (0) | 2022.10.29 |
[JPA] JPA가 지원하는 쿼리 방법 (JPQL, Criteria, QueryDsl) (0) | 2022.10.29 |