-
Named 쿼리 - 정적 쿼리
- 미리 정의해서 이름을 부여해두고 사용하는 JPQL
- 어노테이션, XML에 정의가능
- 애플리케이션 로딩 시점에 초기화 후 재사용
- 애플리케이션 로딩 시점에 쿼리를 검증
선언 방법
@Entity @NamedQuery( name = "Member.findByUsername", query = "select m from Member m where m.username = :username" ) @Getter @Setter public class Member { @Id @GeneratedValue private Long id; private String username; private int age; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; }
Member 엔티티의 객체 선언 위에 어노테이션으로 @NamedQuery를 만들어준다.
List<Member> resultList = em.createNamedQuery("Member.findByUsername", Member.class) .setParameter("username", "member1") .getResultList();
메인 메서드에서 쿼리 부분에 @NamedQuery의 이름을 적어주면 된다.
이러한 방식의 장점은 어노테이션으로 등록이 되기 때문에 만약에 문법에 맞지 않는다면 오류가 날 수 있다.
에러중에 가장 좋은 것은 컴파일 타입 에러인데, 실행 시점에서 잡아주기 때문에 에러를 더 쉽게 잡을 수 있다는 장점이 있다.
그런데 엔티티가 너무 복잡해지고 스프링 데이터 JPA와 QueryDSL이라는 대체 기술이 있어서 많이 쓰이지는 않는다고 한다.
'JPA > JPQL' 카테고리의 다른 글
벌크 연산 (0) 2023.08.09 엔티티를 직접 사용하기 (0) 2023.08.09 페치 조인의 한계 (0) 2023.08.09 페치 조인(fetch join) (0) 2023.08.09 경로 표현식 (0) 2023.08.09