JPA

[JPA] 25. 경로표현식

inuma 2021. 2. 11. 16:31
프로젝트 git url github.com/rtef23/JpaStudy
필요 1. docker
2. docker-compose
프로젝트 정보 mysql : 5.7 - docker image
java : 1.8

 

경로표현식

  • 점을 찍어서 객체 그래프를 탐색하는 것
//[JPQL]
SELECT m.username //상태필드
  FROM Member m
  JOIN m.team t //단일 값 연관 필드
  JOIN m.orders o //컬렉션 값 연관 필드
 WHERE t.name = 'teamA'

 

상태 필드(state field)

  • 단순히 값을 저장하기 위한 필드
  • 경로 탐색의 끝, 추가 탐색 불가

 

연관 필드(association field)

  • 연관 관계를 위한 필드
  • 단일 값 연관 필드
    • @ManyToOne, @OneToOne 대상이 엔티티
    • 묵시적 내부 조인(INNER JOIN) 발생, 추가 탐색 가능
//[JPQL]
SELECT m.team
  FROM Member m
  
//[SQL]
SELECT t.*
  FROM Member m
 INNER JOIN Team t
    ON m.team_id = t.id

 

  • 컬렉션 값 연관 필드
    • @OneToMany, @ManyToMany 대상이 컬렉션
    • 묵시적 내부 조인 발생, 추가 탐색 불가
    • FROM 절에서 명시적 조인을 통해 별칭을 얻으면 별칭을 통해 탐색 가능
    • size만 사용 가능(COUNT 쿼리로 대체되어 실행됨)
//[JPQL]
SELECT t.members
  FROM Team t
//[JPQL]
SELECT t.members.size
  FROM Team t
  
//[SQL]
SELECT (
        SELECT COUNT(m.team_id)
          FROM Member m
         WHERE t.id = m.team_id
       )
  FROM Team t
//[JPQL]
SELECT m.username  //Member에 대해 탐색이 가능해진다.
  FROM Team t
  JOIN t.members m

 

  • 명시적 조인
    • Join 키워드 사용
  • 묵시적 조인
    • 경로 표현식에 의해서 묵시적으로 SQL 조인 발생
    • Inner Join만 가능(Outer Join을 위해서는 명시적으로 사용)

 

  • 묵시적 조인보다는 명시적 조인을 사용하는게 좋다.

 

'JPA' 카테고리의 다른 글

[JPA] 27. Fetch 조인 - 한계  (0) 2021.02.16
[JPA] 26. Fetch 조인 - 기본  (0) 2021.02.11
[JPA] 24. JPQL - 타입 표현, 기타식  (0) 2021.01.31
[JPA] 23. JPQL - 조인, 서브 쿼리  (0) 2021.01.31
[JPA] 22. JPQL - 기본 문법 2  (0) 2021.01.27