Notice
Recent Posts
Recent Comments
Link
«   2024/06   »
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
Tags
more
Archives
Today
Total
관리 메뉴

지우쓰 개발일기

[JPA] JPQL (3) 본문

Spring Boot/JPA

[JPA] JPQL (3)

jiwoo-kimm 2020. 9. 21. 00:56

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

 

자바 ORM 표준 JPA 프로그래밍

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

www.aladin.co.kr


Path Expression


용어
  • 상태 필드(State Field): 단순 값 저장 필드

  • 연관 필드(Association Field): 연관관계, 임베디드 타입 저장 필드

    • 단일 값 연관 필드: @ManyToOne, @OneToOne, 대상이 엔티티

    • 컬렉션 값 연관 필드: @OneToMany, @ManyToMany, 대상이 컬렉션

 

특징
  • 상태 필드 : 경로 탐색의 끝으로 더 탐색할 수 없다.

  • 단일 값 연관 필드

    • 묵시적 내부 조인이 일어난다.

    • 단일 값 연관 경로는 계속 탐색할 수 있다.

  • 컬렉션 값 연관 필드

    • 묵시적 내부 조인이 일어난다.

    • 더 탐색할 수 없다.

    • FROM 절에서 조인을 통해 별칭을 얻으면 별칭으로 탐색할 수 있다.

select t.members from Team t			// O
select t.members.username from Team t		// X
select m.username from Team t join t.members m	// O

 

Subquery


제한
  • SELECT, WHERE, HAVING 절에만 사용할 수 있음

 

함수
  • [NOT] EXISTS (subquery)

  • {ALL | ANY | SOME} (subquery)

    • ALL: 조건을 모두 만족

    • ANY, SOME: 조건을 하나라도 만족

  • [NOT] IN (subquery)

 

조건식


타입 표현
종류 설명 예시
문자 작은 따옴표 사이 표현
작은 따옴표를 표현하고 싶으면 ''
'HELLO'
'She''s'
숫자 L(Long 타입 지정)
D(Double 타입 지정)
F(Float 타입 지정)
10L
10D
10F
날짜 DATE {d 'yyyy-mm-dd'}
TIME {t 'hh-mm-ss'}
DATETIME {ts 'yyyy-mm-dd hh:mm:ss.f'}
{d '2012-03-24'}
{t '10-11-11'}
{ts '2012-03-24 10-11-11.123'}
m.createDate = {d '2012-03-24'}
Boolean TRUE, FALSE  
Enum 패키지명을 포함한 전체 이름 사용 jpabook.MemberType.Admin
엔티티 타입   TYPE(m) = Member

 

연산자 우선 순위
  1. 경로 탐색 연산 (.)

  2. 수학 연산

  3. 비교 연산

    • =, >, >=, <, <=, <>

    • BETWEEN, LIKE, IN, IS NULL, IS EMPTY, MEMBER, EXISTS

  4. 논리 연산

    • NOT, AND, OR

 

컬렉션 식
  • IS [NOT] EMPTY

    • 컬렉션이 비어 있으면 참

  • [NOT] MEMBER [OF]

    • 엔티티나 값이 컬렉션에 포함되어 있으면 참

 

다형성 쿼리


다형성 쿼리

JPQL로 부모 엔티티를 조회하면 그 자식 엔티티도 함께 조회된다.

 

TYPE

조회 대상을 특정 자식 타입으로 한정할 때 사용된다.

// JPQL
select i from Item i
where type(i) IN (Book, Movie)

// SQL
SELECT i FROM Item i
WHERE i.DTYPE in ('B', 'M')

 

TREAT

부모 타입을 특정 자식타입으로 캐스팅할 때 사용된다.

// JPQL
select i from Item i where treat(i as Book).author = 'kim'

// SQL
SELECT i.* from Item i
WHERE i.DTYPE = 'B'
    AND i.author = 'kim'

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

[JPA] QueryDSL  (0) 2020.09.22
[JPA] JPQL (4)  (0) 2020.09.21
[JPA] JPQL (2)  (0) 2020.09.20
[JPA] JPQL (1)  (0) 2020.09.17
[JPA] 객체지향 쿼리 개요  (0) 2020.09.15
Comments