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 |