JPA/JPA 기본

49. 다형성 쿼리

sdafdq 2023. 11. 3. 07:40

중요하지 않다고 한다.

 

객체에서는 다형성 되게 중요한 개념인데

 

 

JPQL은 특정 대상만 조회할 수 있는 기능이 있다.

? 그럼 그냥 DTYPE으로 하면 되는 거 아닌가?

맞다. 쿼리가 그렇게 나간다. 보통 객체에는 DTYPE이 없었던 걸로 기억하는데..

 

select i from Item i where type(i) in(Book, Movie)

select 별칭 from 부모엔티티 별칭 where type(별칭) in(조회할자식엔티티1, 조회할자식엔티티2);

 

하면

select i from i where i.DTYPE in ('B', 'M');

이렇게 나간다.

 

 

 

TREAT 기능 (직역 : ~ 대하다)

자바의 타입캐스팅과 유사

상속구조에서 부모타입을 특정 자식타입으로 다룰 때 사용.

from, where, select 절에서 사용

select i from Item i where treat(i as Book).auther = 'kim'

i를 Book으로 대하면서 auther가 kim인 것만 가져옴,

이렇게 하면 쿼리가

select i.* from Item i where i.DTYPE = 'B' and i.auther = 'kim'

이렇게 나감

먼저 Book만 추리고 거기서 kim을 찾음

 

싱글테이블이냐 JOIN 전략이냐에 따라 다르기도 함.

 

 

 

'JPA > JPA 기본' 카테고리의 다른 글

51. Named 쿼리  (0) 2023.11.03
50. 엔티티 직접 사용  (0) 2023.11.03
48-2. 패치 조인의 한계  (0) 2023.11.02
48. 페치 조인 한계  (0) 2023.11.01
47. 페치 조인 기본  (0) 2023.11.01