반응형
경로 표현식이라는 것은 .(점)을 찍어 객체 그래프를 탐색하는 것이다.
select m.username
from Member m
join m.team t
join m.orders o
where t.name = '팀A'
위의 JPQL에서 m.username, m.team, m.orders, t.name이 모두 경로 표현식을 사용한 예다.
경로 표현식의 용어 정리
- 상태 필드: 단순히 값을 저장하기 위한 필드(필드 or 프로퍼티)
- 연관 필드: 연관관계를 위한 필드, 임베디드 타입 포함(필드 or 프로퍼티)
- 단일 값 연관 필드: @ManyToOne, @OneToOne, 대상이 엔티티
- 컬렉션 값 연관 필드: @OneToMany, @ManyToMany, 대상이 컬렉션
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
@Column(name = "name")
private String username; //상태 필드
private Integer age; //상태 필드
@ManyToOne(..)
private Team team; //연관 필드(단일 값 연관 필드)
@OneToMany(..)
private List<Order> orders; //연관 필드(컬렉션 값 연관 필드)
...
}
정리하면 다음 3가지 경로 표현식이 있다.
- 상태 필드: m.username, m.age
- 단일 값 연관 필드: m.team
- 컬렉션 값 연관 필드: m.orders
경로 표현식과 특징
JPQL에서 경로 표현식을 사용해서 경로 탐색을 하려면 다음 3가지 경로에 따라 어떤 특징이 있는지 이해해야한다.
- 상태 필드 경로: 경로 탐색의 끝이다. 더는 탐색할 수 없다.
- 단일 값 연관 경로: 묵시적으로 내부 조인이 일어난다. 단일값 연관 경로는 계속 탐색할 수 있다.
- 컬렉션 값 연관 경로: 묵시적으로 내부 조인이 일어난다. 더는 탐색할 수 없다. 단 FROM 절에서 조인을 통해 별칭을 얻으면 별칭으로 탐색할 수 있다.
반응형
'JPA' 카테고리의 다른 글
JPQL - CASE 식 (0) | 2024.03.25 |
---|---|
JPQL - 서브 쿼리 (2) | 2023.10.23 |
JPQL - 페치 조인(Fetch Join) (0) | 2023.10.12 |
JPQL 조인 (2) | 2023.10.10 |
JPQL - (기본 문법, 쿼리 API, 페이징 API, 집합과 정렬) (0) | 2023.09.25 |