Posts [자바 ORM 표준 JPA 프로그래밍-기본편] Named 쿼리
Post
Cancel

[자바 ORM 표준 JPA 프로그래밍-기본편] Named 쿼리

본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다.


JPQL - Named 쿼리 (정적 쿼리)

  • 미리 정의해서 이름을 부여해두고 사용하는 JPQL
  • 정적 쿼리
  • 어노테이션, XML에 정의
  • 애플리케이션 로딩 시점에 초기화 후 재사용
    • 진짜 네임드 쿼리의 장점
    • 애플리케이션 로딩 시점에 JPA가 SQL로 파싱해서 캐슁한다.
  • 애플리케이션 로딩 시점에 쿼리를 검증
    • 실행하는 시점에 SQL로 파싱하는데 문제가 있으면 오류냄
    • image

Named 쿼리 - 어노테이션

image

Named 쿼리 - XML에 정의

  • META_INF/persistence.xml
1
2
<persistence-unit name="jpabook" >
    <mapping-file>META-INF/ormMember.xml</mapping-file>
  • META-INF/ormMember.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://xmlns.jcp.org/xml/ns/persistence/orm" version="2.1">
    <named-query name="Member.findByUsername">
    <query><![CDATA[
    select m
    from Member m
    where m.username = :username
    ]]></query>
    </named-query>

    <named-query name="Member.count">
    <query>select count(m) from Member m</query>
    </named-query>
</entity-mappings>

Named 쿼리 환경에 따른 설정

  • XML이 항상 우선권을 가진다.
  • 애플리케이션 운영 환경에 따라 다른 XML을 배포할 수 있다.

추가적으로

실무에서 Spring Data JPA가 정말 유용한데 @Query("select u from User u where u.emailAddress = ?1"); 이런식으로 할 수 있다.

이게 JPA의 Named 쿼리인데 애플리케이션 로딩 시점에 쿼리를 검증하여 캐싱한다.

This post is licensed under CC BY 4.0 by the author.

[자바 ORM 표준 JPA 프로그래밍-기본편] 엔티티 직접 사용

[자바 ORM 표준 JPA 프로그래밍-기본편] 벌크 연산