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 (4) 본문

Spring Boot/JPA

[JPA] JPQL (4)

jiwoo-kimm 2020. 9. 21. 01:12

본 포스팅은 자바 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
Comments