JPQL 경로 표현식

2023. 4. 16. 01:12·📦 Database/JPQL

💡 JPQL 경로표현식

.(점)을 찍어 객체 그래프를 탐색하는 것

select m.username // 상태 필드
from Member m
join m.team t // 단일 값 연관 필드
join m.orders o // 컬렉션 값 연관 필드
where t.name = 'teamA';

상태 필드

  • 단순히 값을 저장하기 위한 필드

연관 필드

  • 연관관계를 위한 필드
  • 단일 값 연관 필드 : 대상이 Entity이다. (N:1, 1:1)
  • 컬렉션 값 연관 필드 : 대상이 Collection이다. (1:N, N:M)

특징

묵시적 내부 조인이 발생하는 단일 값 연관 경로, 컬렉션 값 연관 경로는 조심해서 사용해야 한다.

내부적으로 inner join문이 나가기 때문에 쿼리튜닝이 어렵기 때문에,
왠만하면 명시적 조인을 사용하는것이 가장 좋다.


상태필드

  • 경로 탐색의 끝으로 오면 , 탐색을 더 이상 못한다.

단일 값 연관 경로

  • 묵시적 내부 조인(inner join) 발생, 객체 그래프 탐색이 가능하다.

컬렉션 값 연관 경로

  • 묵시적 내부 조인(inner join) 발생, 그래프 탐색이 불가능하므로 명시적 조인을 사용해야한다.
  • From문에서 명시적 조인을 통해 별칭을 얻으면 별칭을 통해 탐색 가능
// 그래프 탐색 불가능한 쿼리
String query = "select t.members from Team t";

// Alias 부여를 통해 명시적 조인을 사용하면 그래프 탐색이 가능하다.
String query = "select m from Team t join t.members m"; 

묵시적 조인 시 주의사항

  • 항상 내부 조인으로 동작한다.
  • 컬렉션은 경로 탐색의 끝, 명시적 조인을 통해 Alias를 얻어야 더 탐색이 가능하다.
  • 경로 탐색은 주로 Select, Where에서 사용하지만,
    묵시적 조인으로 인해 SQL의 From(Join)문에 영향을 준다.

실무 팁

  • 가급적 묵시적 조인보다 명시적 조인을 사용하자.
  • 조인은 쿼리 튜닝에 중요한 포인트이다.
  • 묵시적 조인은 조인이 일어나는 상황을 한눈에 파악하기 어렵다.
저작자표시 (새창열림)

'📦 Database > JPQL' 카테고리의 다른 글

JPQL Join & Fetch Join  (0) 2023.04.16
JQPL 벌크 연산 & 엔티티 직접 사용  (0) 2023.04.16
JQPL 다형성 쿼리 & 결과 조회 API  (0) 2023.04.16
JPQL Named Query & Parameter Binding  (0) 2023.04.16
JPQL Paging API  (0) 2023.04.16
'📦 Database/JPQL' 카테고리의 다른 글
  • JPQL Join & Fetch Join
  • JQPL 벌크 연산 & 엔티티 직접 사용
  • JQPL 다형성 쿼리 & 결과 조회 API
  • JPQL Named Query & Parameter Binding
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      GStreamer #Pipeline
      Lock #Thread #Concurrency
      React #Markdown
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    JPQL 경로 표현식
    상단으로

    티스토리툴바