지우쓰 개발일기
[JPA] JPQL (3) 본문
본 포스팅은 자바 ORM 표준 JPA 프로그래밍 (김영한 저)을 읽고 정리한 내용입니다.
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 |
연산자 우선 순위
-
경로 탐색 연산 (.)
-
수학 연산
-
비교 연산
-
=, >, >=, <, <=, <>
-
BETWEEN, LIKE, IN, IS NULL, IS EMPTY, MEMBER, EXISTS
-
-
논리 연산
-
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 |