[JPA] 경로 표현식

2022. 6. 15. 01:32· DB/JPA
목차
  1. 경로표현식 개요
  2. 경로표현식의 3가지 방법과 특징
  3. 명시적 조인과 묵시적 조인

목차

     

    경로표현식 개요

    경로표현식이란 점을 찍어 객체 그래프를 탐색하는 것 입니다.

    경로표현식은 3가지 방법이 있습니다. 경로표현식은 내부적으로 동작하는 방식이 달라집니다.

    select m.username -> 상태 필드로 객체 그래프를 탐색
    from Member m
    join m.team t  -> 단일 괎 연관 필드 (엔티티 연관)
    join m.orders o -> 컬렉션 값 연관 필드(양방향 연관)
    where t.name = 'teamA'

     

     

     

    경로표현식의 3가지 방법과 특징

    경로표현식은 상태 필드, 단일 값 연관필드, 컬렉션 값 연관 필드가 있습니다.

     

     

    상태 필드(state field) 

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

    경로 탐색의 끝입니다. m.username 일 경우 username에서 점을 찍고 탐색할 것이 더 이상 없습니다.

     

     

    연관 필드(단일 값 연관 필드, 컬렉션 값 연관 필드) 

    연관관계를 위한 필드, 2가지가 있습니다.

    • 단일 값 연관 필드
    • 컬렉션 값 연관 필드 

     

    단일 값 연관 필드

    대상이 엔티티인 경로표현식입니다. @ManyToOne, @OneToOne 

    묵시적인 내부 조인이 발생합니다. 

    더 이상 탐색이 가능합니다. m.team으로 탐색한 이후 m.team.name  이런 식으로 추가로 더 탐색할 수 있습니다.

     

    컬렉션 값 연관 필드 

    대상이 컬렉션인 경로표현식입니다. @OneToMany, @ManyToMany

    묵시적인 내부 조인이 발생합니다.

    탐색을 더 이상 할 수 없습니다. m.orders 에서 name으로 탐색하려해도 orders는 어떤 것의 name인지 알 수 없기 때문에 추가 탐색이 안됩니다.

    FROM 절에서 명시적 조인을 통해 별칭을 얻으면 별칭을 통해 탐색이 가능합니다.

    select m From Team t join t.members m

     

     

    명시적 조인과 묵시적 조인

     

    명시적 조인

    명시적으로 join 키워드를 직접 사용하는 것 입니다. 

    select m from Member m join m.team t

     

    묵시적 조인

    경로표현식에 의해 묵시적으로 SQL 조인이 발생하는 것 입니다.(내부 조인만 가능합니다. 외부조인을 할려면 명시적 조인 사용합니다)

    select m.team from Member m

     

    // 다음과 같은 jpql 쿼리를 전송하면
    select o.member 
    from Order o
    
    // DB에는 해당 SQL이 전송됩니다.
    select m.*
    from Orders o
    inner join Member m on o.member_id = m.id

    위의 코드처럼 JPQL에는 JOIN을 하지 않지만 묵시적 조인을 통해 SQL에는 INNER JOIN이 발생합니다. 실제 서비스 환경에서는 DB가 크고 복잡하기 때문에 묵시적 조인으로 인해 예상하지 못한 성능저하가 발생할 수 있고 상황파악에도 어렵기 떄문에 튜닝의 난이도 또한 상승합니다.

    무조건 묵시적 조인 대신에 명시적 조인을 사용하는 것이 좋습니다.

    1. 경로표현식 개요
    2. 경로표현식의 3가지 방법과 특징
    3. 명시적 조인과 묵시적 조인
    'DB/JPA' 카테고리의 다른 글
    • [JPA] JPA
    너지살
    너지살
    너지살
    너지살개발자
    너지살
    전체
    오늘
    어제
    • 분류 전체보기 (375)
      • 잡식 (2)
        • 티스토리 (2)
      • 개발 일지 (0)
        • OMS 프로젝트 (4)
        • 우테코 6기 프리코스 (1)
      • Git (2)
      • JAVA (15)
        • Java 공부 (6)
        • 자료구조 (4)
        • 도움되는 메모 (4)
      • DevOps (18)
        • AWS (6)
        • Docker (2)
        • Jenkins (1)
        • Nginx (1)
        • Kafka (6)
        • RabbitMQ (2)
      • Spring, Spring Boot (16)
        • Test Code (1)
        • AOP (2)
        • Batch (3)
        • Cache - Redis (5)
        • Cloud Config - 설정 파일 관리 (3)
        • 성능 측정 (1)
        • 예외 처리 (1)
      • BackEnd (1)
        • Spring 공부 (1)
        • Thymeleaft (0)
      • DB (17)
        • JPA (2)
        • DB 공부 (3)
        • DB 포스팅 (4)
        • DB 답장 (1)
        • MySQL (2)
        • Redis (5)
        • MongoDB (0)
      • CS (8)
        • Spring (4)
        • DataBase (3)
        • Java (1)
      • Algorithm (203)
        • 알고리즘 개념 (5)
        • 정렬 알고리즘 (11)
        • 프로그래머스 문제풀이 (18)
        • 백준 문제풀이 (165)
        • 소프티어 문제풀이 (3)
        • 알고리즘 시험 정리 (1)
      • SQL (0)
        • 문법 (1)
        • 프로그래머스 문제풀이 (52)
        • 리트코드 문제풀이 (19)
      • IT (1)
        • IT 공부 (1)
      • 정리 (10)
        • 질문 정리 (10)

    블로그 메뉴

    • 홈
    • 태그
    • 방명록

    공지사항

    인기 글

    태그

    • 투포인트
    • 깊이/너비 우선탐색
    • 두 포인터
    • 분리 집합
    • DFS
    • Spring Boot
    • Sorting algorithm
    • 소프티어
    • 다음 순열 찾기
    • Java
    • dynamic programing
    • docker
    • two pointer
    • Test code
    • 백준
    • 다이나믹 프로그래밍
    • Bitmast
    • 최소 신장 트리
    • 자료구조
    • 그래프 이론
    • db
    • Spring Batch
    • 부분탐색
    • 비트마스킹
    • 병렬 처리
    • Java 정리
    • 크루스칼 알고리즘
    • Next permutation
    • 질문 정리
    • 투 포인터
    • dynamiceprogramming
    • JPA
    • Algorithm
    • 데이터베이스
    • Spring Boot Redis 연결
    • cache
    • 설정
    • 알고리즘
    • git
    • 그래프 탐색
    • 우선수위큐
    • MST
    • 외판원 순회 문제
    • 경로표현식
    • 최소 스패닝 트리
    • DP
    • 유니온파인드
    • 다이나믹프로그래밍
    • Union-Find
    • redis

    최근 댓글

    최근 글

    hELLO · Designed By 정상우.v4.2.2
    너지살
    [JPA] 경로 표현식
    상단으로

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.