Spring/JPA기본

JPQL의 다형성 쿼리와 네임드 쿼리

Per ardua ad astra ! 2021. 8. 4. 14:01

다형성 쿼리

조회 대상을 특정 자식으로 한정할 수 있음 (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