
Named 쿼리는 JPA에서 제공하는 기능으로 JPQL를 미리 정의하고 이름을 지정하여 애플리케이션에서 재사용할 수 있게 만든 쿼리를 말한다.
Named 쿼리는 애플리케이션 로딩 시점에 초기화되며 검증되므로 오타나 오류를 미리 발견할 수 있는 장점이 있다.
미리 정의
쿼리를 미리 정의하고 이름을 지정하기 때문에 애플리케이션 내에서는 해당 이름만을 참조하여 쿼리를 실행할 수 있다.
애플리케이션 로딩 시점에 검증
Named 쿼리는 애플리케이션 로딩 시점에 쿼리의 문법을 검증한다.
따라서 실행 시점의 오류를 줄일 수 있다.
재사용성
한 번 정의된 Named 쿼리는 여러 곳에서 재사용 가능하다.
코드의 중복을 줄이고 유지 보수를 용이하게 한다.
성능 최적화
일부 JPA 구현체에서는 Named 쿼리를 최적화하여 처리하는 경우가 있다.
애노테이션을 통한 정의
엔터티 클래스나 매핑 파일에 @NamedQuery 애노테이션을 사용하여 Named 쿼리를 정의할 수 있다.
@Entity
@NamedQuery(
name = "Member.findByName",
query = "SELECT m FROM Member m WHERE m.name = :name"
)
public class Member {
// ...
}
XML을 통한 정의
orm.xml과 같은 XML 매핑 파일을 사용하여 Named 쿼리를 정의할 수도 있다.
Named 쿼리를 사용할 때는 EntityManager의 createNamedQuery 메서드를 사용하며, 정의한 쿼리의 이름을 인자로 전달한다.
TypedQuery<Member> query = em.createNamedQuery("Member.findByName", Member.class);
query.setParameter("name", "홍길동");
List<Member> members = query.getResultList();