JPQL - NamedQuery

PPakSSam·2022년 1월 26일
0
post-thumbnail

NamedQuery란 미리 정의해서 이름을 부여해두고 사용하는 JPQL이다.
NamedQuery는 다음과 같은 특징을 가지고 있다.

  • 정적 쿼리이다. 따라서 동적 쿼리는 NamedQuery로 만들 수 없다.
  • 어노테이션이나 XML에 정의한다.
  • 어플리케이션 로딩 시점에 초기화 후 재사용한다.
    • JPA는 JPQL을 SQL로 변환하는 과정을 거치므로 그로 인한 cost가 발생
    • 그러나 NamedQuery는 로딩시점에 초기화 하므로 이로 인한 cost가 없어진다.
  • 어플리케이션 로딩 시점에 쿼리를 검증한다. -> 미리 검증할 수 있다.

@Entity
@NamedQuery(
    name = "Member.findByUsername",
    query = "select m from Member m where m.username = :username"
)
public class Member {
    
    @Id @GeneratedValue
    private Long id;
    private String username;
    private int age;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "TEAM_ID")
    private Team team;
}
List<Member> resultList = em.createNamedQuery("Member.findByusername", Member.class)
                            .setParameter("username", "회원1")
                            .getResultList();

for (Member member : resultList) {
    System.out.println("member = " + member);
}

// 결과
member = Member{id=3, username='회원1', age=0}
profile
성장에 대한 경험을 공유하고픈 자발적 경험주의자

0개의 댓글