BE전문가 프로젝트

Named쿼리 본문

JPA

Named쿼리

원호보고서 2022. 11. 10. 22:49

Named쿼리 - 정적 쿼리

  • 미리 정의해서 이름을 부여해두고 사용하는 JPQL
  • 정적 쿼리
  • 어노테이션, XML에 정의
  • 애플리케이션 로딩 시점에 초기화 후 재사용
  • 애플리케이션 로딩 시점에 쿼리를 검증

엔티티에 미리 선언해두는 쿼리

정적쿼리는 동적쿼리와 다르게 변하지 않는 다는 특징을 가지고 있다. 애플리케이션 로딩 시점에 sql로 파싱을 하여 캐싱을 한다.

@Entity@Getter@Setter
@NamedQuery(name = "Member.findByUsername",
            query = "select m from MemberQQQ m where m.username = :username")
List<Member> result = em.createNamedQuery("Member.findByUsername", Member.class)
                    .setParameter("username", "member1")
                    .getResultList();

위에 있는 코드처럼 쿼리 작성 시 오타가 나오는 경우는 자주 일어나는 일이다. 이 상태로 쿼리를 실행해 보면 신텍스 오류가 나온다. 애플리케이션 로딩 시점에 미리  올리기 때문에 문법 오류가 나게 되면 그 것을 캐치하여 오류를 확인 할 수 도록 해준다.

 

 

스프링 Data JPA에서는 인터페이스 바로 위에 쿼리를 작성 할 수 있다. 이것이 Named 쿼리와 같은 역할을 한다. 즉 애플리케이션 로딩 시점에 문법 오류를 잡아주는 것이다.

'JPA' 카테고리의 다른 글

JPQL 벌크 연산  (0) 2022.11.10
엔티티 직접 사용  (0) 2022.11.10
다형성 쿼리  (0) 2022.11.10
페치조인의 한계  (0) 2022.11.09
JPQL - 페치 조인(fetch join)  (0) 2022.11.08
Comments