JPQL - 경로 표현식

2023. 10. 23. 13:54JPA

반응형

경로 표현식이라는 것은 .(점)을 찍어 객체 그래프를 탐색하는 것이다.

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