Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

지우쓰 개발일기

[JPA] JPQL (2) 본문

Spring Boot/JPA

[JPA] JPQL (2)

jiwoo-kimm 2020. 9. 20. 23:04

본 포스팅은 자바 ORM 표준 JPA 프로그래밍 (김영한 저)을 읽고 정리한 내용입니다.

 

자바 ORM 표준 JPA 프로그래밍

에이콘 오픈 소스 프로그래밍 시리즈. 이 책은 JPA 기초 이론과 핵심 원리, 그리고 실무에 필요한 성능 최적화 방법까지 JPA에 대한 모든 것을 다룬다.

www.aladin.co.kr


JOIN


 

INNER JOIN
  • 연관 필드로 자동 조인

  • INNER은 기본값이라 생략 가능

  • 연관 필드: 다른 엔티티와 연관관계를 갖는 필드

SELECT m
FROM Member m
[INNER] JOIN m.team t

 

LEFT JOIN
  • 연관 필드로 자동 조인

  • OUTER은 생략 가능해서 보통 LEFT JOIN으로 사용

SELECT m
FROM Member m
LEFT [OUTER] JOIN m.team t

 

COLLECTION JOIN
  • 컬렉션을 사용하는 곳에 조인하는 것

  • N:1 JOIN: 단일 값 연관 필드 사용

    • ex) 회원 → 팀

  • 1:N JOIN: 컬렉션 값 연관 필드 사용

    • ex) 팀 → 회원

SELECT t, m
FROM Team t
LEFT JOIN t.members m

 

THETA JOIN
  • 세타 내부 조인만 지원

  • 서로 관계 없는 엔티티 간 조인 가능

select count(m) from Member m, Team t
where m.username = t.name

 

JOIN ON
  • 조인 대상 필터링

  • 보통 외부 조인에서만 사용

select m, t from Member m
left join m.team t on t.name = 'A'

 

특징
  • 결과를 반환할 때 연관관계까지 고려하지 않음

  • SELECT 절에 지정된 엔티티만 반환됨

 

FETCH JOIN


연관된 엔티티나 컬렉션을 한 번에 같이 조회하는 기능

[ LEFT [OUTER] | INNER ] JOIN FETCH 조인경로

 

엔티티 페치 조인
  • 연관된 엔티티를 함께 조회

  • 객체 그래프를 유지하면서 조회됨

  • 실제 엔티티를 조회했으므로 지연 로딩이 일어나지 않음

select m
from Member m join fetch m.team

 

컬렉션 페치 조인
  • 연관된 컬렉션을 함께 조회

  • 객체 그래프를 유지하면서 조회됨

  • 실제 엔티티를 조회했으므로 지연 로딩이 일어나지 않음

  • 1:N 조인: 조인하면서 결과 개수가 증가해서 같은 데이터를 여러 건 로드함

select t
from Team t join fetch t.members
where t.name = '팀A'

 

페치 조인 & DISTINCT
  • SQL에 DISTINCT 추가 & 어플리케이션 내에서 중복 제거

 

특징
  • SQL 호출 횟수를 줄여 성능을 최적화할 수 있음

  • 엔티티 로딩 전략보다 우선하기 때문에 fetch join을 사용하면 무조건 함께 조회됨

  • 준영속 상태에서도 객체 그래프를 탐색할 수 있음

  • 엔티티 모양의 객체 그래프를 유지할 때 효율적

 

한계
  • fetch join 대상에는 별칭을 줄 수 없음

  • 둘 이상의 컬렉션을 fetch할 수 없음

  • 컬렉션을 fetch join하면 Paging API를 사용할 수 없음

 

'Spring Boot > JPA' 카테고리의 다른 글

[JPA] JPQL (4)  (0) 2020.09.21
[JPA] JPQL (3)  (0) 2020.09.21
[JPA] JPQL (1)  (0) 2020.09.17
[JPA] 객체지향 쿼리 개요  (0) 2020.09.15
[JPA] 값 타입  (0) 2020.09.13
Comments