@Entity
@NamedQuery(
name = "Member.findByUsername",
query = "select m from Member m where m.username = :userName"
)
public class Member {
(생략)
}
List<Member> resultList = em.createNamedQuery("Member.findByUsername", Member.class)
.setParameter("userName", "MemberA")
.getResultList();
'select m from Member m where m.username = :userName' 해당 쿼리가 변환돼서 실행 후 값을 반환 합니다.
NamedQuery 장점:
1. 미리 정의해서 이름을 부여해두고 사용하는 JPQL
2. 정적 쿼리
3. 애플리케이션 로딩 시점에 초기화 후 재사용
4. 애플리케이션 로딩 시점에 쿼리를 검증
(ex: 예를 들어 ... from Member m ... 대신 실수로 ... from MemberERR m ... 이라고 쿼리를 작성 했을때, NamedQuery는 컴파일 시점에서 MemberERR이라는 엔티티는 존재하지 않을 것을 확인하고 에러를 보여줍니다.
'Member.findByUsername failed because of: org.hibernate.hql.internal.ast.QuerySyntaxException: MemberERR is not mapped [select m from MemberERR m where m.username = :userName]')