728x90
반응형
1. Named 쿼리란?
- 미리 정의해서 이름을 부여해두고 사용하는 JPQL로 이름으로 해당 쿼리를 불러와서 사용할 수 있다.
- 정적 쿼리만 가능하다.
- 어노테이션, XML에 정의할 수 있다.
- 애플리케이션 로딩 시점에 초기화 후 재사용할 수 있다.
- 애플리케이션 로딩 시점에 쿼리를 검증할 수가 있다.(로딩 시점에 파싱을 하고 캐싱을 한다.)
2. Named 쿼리 사용해보기
Member 엔티티를 가지고 Named 쿼리를 사용해 보겠다.
먼저, Member 클래스에 가서 @NamedQuery 어노테이션을 붙여주고, name과 query를 작성해 준다.
@Entity
@Table(name = "MEMBERS")
@NamedQuery(
name = "Member.findByUsername",
query = "select m from Member m where m.username = :username"
)
public class Member {
//생략
}
실제 사용은 createNamedQuery를 통해서 사용할 수 있다.
List<Member> resultList = em.createNamedQuery("Member.findByUsername", Member.class)
.setParameter("username", "회원1")
.getResultList();
for (Member member : resultList) {
System.out.println(member.toString());
}
실행을 해보면 아래와 같은 결과를 확인할 수 있다.

@NamedQuery를 사용하게 되면 query를 파싱해서 캐싱을 하는데 query가 잘못되어 있으면 로딩 시점에 바로 에러를 확인할 수 있다.
이말이 애플리케이션 로딩 시점에 검증할 수 있다는 의미이다.
간단하게 내가 query에 오타를 내고 실행을 시킨다면 아래와 같이 에러를 확인할 수 있다.

3. Named 쿼리 XML에 정의하는 방법
META-INF 폴더 안에 있는 persistence.xml 파일 안에 아래와 같이 정의를 해주고

META-INF 폴더 안에 persistence.xml 파일 안에 설정한 매핑 파일 이름으로 파일을 하나 만들어서 아래와 같이 정의해준다.

Named 쿼리 환경에 따른 설정
- XML이 항상 우선권을 가진다.
- 애플리케이션 운영 환경에 따라 다른 XML을 배포할 수 있다.
728x90
반응형
'TIL > JPA' 카테고리의 다른 글
[TIL/JPA] 기본개념 : 벌크 연산 (2) | 2024.09.17 |
---|---|
[TIL/JPA] 기본개념 : JPQL에서 엔티티 직접 사용하기 (0) | 2024.09.17 |
[TIL/JPA] 기본개념 : 다형성 쿼리 (0) | 2024.09.15 |
[TIL/JPA] 기본개념 : 페치 조인(fetch join) (0) | 2024.09.11 |
[TIL/JPA] 기본개념 : 경로 표현식 (0) | 2024.09.10 |