본문 바로가기
IT/Java

NamedQuery 에 대해

by 성준하이 2024. 5. 7.
반응형
Named Query란?

Entity에 @NamedQuery 애노테이션을 부여해서 이 쿼리를 이름으로 불러서 사용할 수 있다.

쉽게 말하면 미리 이름을 부여해서 재활용 할 수 있는 JPQL이다.

이는 동적 쿼리는 불가능하며 정적 쿼리만 가능하다.

 

애플리케이션 로딩 시점에 이 쿼리를 JPA가 미리 파싱해서 캐싱을 해놓고, 로딩 시점에 쿼리 검증이 가능하다.

 

사용법은 Entity 에서 사용을 하고 아래와 같다.

..이상 생략
@Entity
@NamedQuery(
    name = "User.findByName",
    query = "SELECT a FROM USER AS a WHERE a.name = :name"
)
public class User {
..이하 생략
..이상 생략
List<User> users = em.createNamedQuery("User.findByName", User.class)
    .setParameter("name", "thenicesj")
    .getResultList();

 

이런식으로 사용이 가능하고 만약 Query에서 Syntax 등의 에러가 발생할 경우

Runtime이 아닌 Compile 단계에서 잡을수 있다.(둘의 비교는 참고 포스팅 참고)


참고 포스팅

https://thenicesj.tistory.com/834

 

컴파일 vs 런타임 (application.yml / application.properties 로드 시점)

컴파일과 런타임의 차이에 대해 다루면서 스프링 설정 파일인 application.yml / application.properties 의 로드시점에 대해서 적어볼 것이다. 이전 포스팅에서 컴파일과 런타임에 대해서는 아니지만 언급

thenicesj.tistory.com

 

반응형

댓글