JPQL의 다형성 쿼리와 네임드 쿼리
다형성 쿼리
조회 대상을 특정 자식으로 한정할 수 있음 (type(), treat 이용)
ex)
Type 이용
Item
- Album
- Movie
- Book
JPQL
select i from Item i where type(i) IN(Book, Movie)
SQL
select i from Item i where i.DTYPE in ('Book', 'Movie')
treat 사용
-> 자바의 타입 캐스팅과 유사하다.
-> 상속 구조에서 부모타입을 특정 자식타입으로 다룰때 사용
jpql
select i from Item i where treat(i as Book).author = 'kim'
Named 쿼리
• 미리 정의해서 이름을 부여해두고 사용하는 JPQL
-> 재사용성 ↑
• 정적 쿼리
• 어노테이션, XML에 정의 가능 (굳이 안해도됨)
• 애플리케이션 로딩 시점에 초기화 후 재사용 **
• 애플리케이션 로딩 시점에 쿼리를 검증 ***
=> 보통 JPQL은 결국 SQL로 파싱되서 실행되는데 이에 따른 COST가 분명히 존재할 수 있다. Named 쿼리는 로딩시점에 초기화되고 캐시에들어가서 사용될 때마다 코스트가 줄어든 상태로 실행 할 수 있기 때문에 성능향상에 도움이 된다.
=> named쿼리의 문법이 잘못되면 로딩시점에 에러를 발생 시키기 때문에 오류체크에도 좋다.
예시)
NamedQuery 생성
@Entity
@NamedQuery(
name = "Member.findByUsername",
query = "SELECT m FROM Member m where m.username = :username"
public class Member {
// ... 생략
}
NamedQuery 사용
List<Member> resultList = em.createNamedQuery("Member.findByUsername", Member.class)
.setParameter("username", "회원1")
.getResultList();
이 게시물은 '자바 ORM 표준 JPA 프로그래밍' 강의를 수강하고 정리한 내용임을 밝힙니다.
출처: https://www.inflearn.com/course/ORM-JPA-Basic#
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의
JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 본 강의는 자바 백엔
www.inflearn.com