✍경로 표현식?
- 점을 찍어 객체 그래프를 탐색하는 것.
SELECT m.username -> 상태 필드 ()
FROM Member m
JOIN m.team t -> 단일 값 연관 필드
JOIN m.orders o -> 컬렉션 값 연관 필드
WHERE t.name = '팀A'
- 상태 필드 : 단순히 값을 저장하기 위한 필드 / 경로 탐색의 끝, 탐색 X
- 연관 필드 : 연관 관계를 위한 필드
ㆍ 단일 값 연관 필드 : @ManyToOne, @OneToOne, 대상이 엔티티 / 묵시적 내부 조인 발생, 탐색 O
ㆍ 컬렉션 값 연관 필드 : @OneToMany, @ManyToMany, 대상이 컬렉션 / 묵시적 내부 조인 발생, 탐색 X
상태 필드 : m.username -> 에서 더 탐색할 수 없음.
단일 값 연관 필드 : m.team.name -> 처럼 더 탐색할 수 있음.
컬렉션 값 연관 필드 : t.members-> 에서 더 탐색할 수 없음.
=> 대신 select m.username from Team t join t.members m 와 같이 명시적 조인을 사용하여 탐색 가능.
- JPA에서 연관 필드를 사용하여 연관 관계의 엔티티를 조회하였을때 SQL에서는 조인이 발생한다. 이를 묵시적 내부 조인이라고 함.
- 내부 조인이 발생하기 때문에 쿼리 튜닝이 힘들어짐, 최대한 묵시적 내부 조인이 발생하지 않도록 설계. 아래 예시 처럼 명시적으로 join을 사용해야한다.
- 가급적 묵시적 조인 대신에 명시적 조인 사용.
- 조인은 SQL 튜닝에 중요 포인트이기 때문.
- 묵시적 조인은 조인이 일어나는 상황을 한눈에 파악하기 어려움
본 게시글은 김영한님의 Inflearn 강의를 토대로 제작되었습니다.
https://www.inflearn.com/course/ORM-JPA-Basic/dashboard
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의
JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런
www.inflearn.com