JPA JPQL NamedQuery

KMS·2022년 4월 12일
0

JPA Basics

목록 보기
19/20

Member 엔티티

@Entity
@NamedQuery(
        name = "Member.findByUsername",
        query = "select m from Member m where m.username = :userName"
)
public class Member {
    (생략)
}

Main

 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]')

profile
Student at Sejong University Department of Software

0개의 댓글