Named 쿼리
결론 : 애노테이션, xml 설정 파일 등으로 Named 쿼리를 사용할 수 있지만 강사님 개인적인 견해로는 @NamedQuery를 클래스 앞에 붙이면 코드가 지저분(?)해지기 때문에 결국 실무에서는 스프링 데이터 JPA를 함께 사용하는 것이 좋다고 한다.
미리 정의해서 이름을 부여해두고 사용하는 JPQL
정적쿼리
어노테이션
XML에 정의
애플리케이션 로딩 시점에 초기화 후 재사용 JPQL이 파싱해서 SQL로 사용.(파싱 비용이 발생하는데 로딩시점에 한번하고 캐싱하기 때문에 재사용 가능!)
애플리케이션 로딩 시점에 쿼리를 검증⭐️⭐️⭐️⭐️⭐️ =>애플리케이션 로딩 시점에서 애노테이션 기반의 쿼리를 로딩하는데 이 때 오타나 잘못된 것이 있으면 컴파일 오류가 발생하기 때문에 확인하고 즉시 수정이 가능하다! "세상에서 제일 좋은 오류는 컴파일 오류" 라는 것을 기억! 물론 이또한 런타임시점에서 로딩할 때 발생하는 오류이긴하지만 컴파일 오류와 최악(사용자가 사용할 때 발생하는 오류) 중간 정도에 해당.
사용 방법
EntityManager.createQuery❌ EntityManager.createNameQuery("쿼리이름",Member.class)
애노테이션
XML에 정의
Named 쿼리 환경에 따른 설정 특별히 이런 일은 잘 없지만, 어떤 솔루션을 개발했을 때 특정 상황에 따라 다르게 처리해야할 때. 매핑 파일을 따로 배포하면 된다.
XML이 항상 우선권을 가진다.
애플리케이션 운영 환경에 따라 다른 XML을 배포할 수 있다.
스프링 데이터 JPA를 사용하면 @Query로 사용할 수 있다. 스프링 데이터 JPA는 JPA를 추상화해서 좀 더 편하게 사용하기 위함인데 여기서 @Query("...")를 Named Query로 등록한다! 그래서 애플리케이션 로딩 시점에 파싱 되고, 오류 발생시 바로 컴파일 오류로 잡아준다. "이름없는 Named Query"라고 한다.
스프링 데이터 JPA @Query 예시 : 인터페이스에서 바로 쓸 수 있다!
Last updated