지우쓰 개발일기
[JPA] JPQL (4) 본문
본 포스팅은 자바 ORM 표준 JPA 프로그래밍 (김영한 저)을 읽고 정리한 내용입니다.
자바 ORM 표준 JPA 프로그래밍
에이콘 오픈 소스 프로그래밍 시리즈. 이 책은 JPA 기초 이론과 핵심 원리, 그리고 실무에 필요한 성능 최적화 방법까지 JPA에 대한 모든 것을 다룬다.
www.aladin.co.kr
엔티티 직접 사용
-
JPQL에서 엔티티 객체를 직접 사용하면 SQL에서는 해당 엔티티의 PK 값을 사용한다.
-
묵시적 조인은 일어나지 않는다.
-
즉, 엔티티 식별자를 사용한 JPQL과 엔티티를 직접 사용한 JPQL이 실행하는 SQL은 동일하다.
Named Query
동적 쿼리(Dynamic Query) | 정적 쿼리(Named Query) |
JPQL을 문자로 완성해서 직접 넘기는 것 | 미리 정의한 쿼리에 이름을 부여해 호출하는 것 |
장점
-
어플리케이션 로딩 시점에 JPQL 문법을 체크하고 파싱하기 때문에 오류 발견 시점이 빠르다.
-
사용하는 시점에는 이미 파싱된 쿼리를 재사용하기 때문에 효율적이다.
정의
-
@NamedQuery, @NamedQueries
@Entity
@NamedQueries({
@NamedQuery(
name = "Member.findByUserName", // 이름 (필수)
query = "select ..." // 쿼리 (필수)
lockMode = NONE, // 쿼리 실행 시 락 설정
hints = {}), // JPA 구현체에 쿼리 힌트
@NamedQuery(
name = "Member.count",
query = "select ...")
})
public class Member {...}
-
XML (Annotation보다 우선권 가짐)
<named-query name="Member.findByUserName">
<query><CDATA[
select m
from Member m
where m.username = :username
]></query>
</named-query>
'Spring Boot > JPA' 카테고리의 다른 글
[JPA] JPQL (5) (0) | 2020.09.24 |
---|---|
[JPA] QueryDSL (0) | 2020.09.22 |
[JPA] JPQL (3) (0) | 2020.09.21 |
[JPA] JPQL (2) (0) | 2020.09.20 |
[JPA] JPQL (1) (0) | 2020.09.17 |