JPA/JPQL

[JPA] 상속관계에서 JPQL ( TYPE, TREAT )

IT록흐 2023. 6. 16. 19:57
반응형

https://lordofkangs.tistory.com/390

 

[JPA] JOIN 과 JOIN FETCH의 차이

JOIN과 JOIN FETCH를 헷갈릴 수 있다. FROM 엔티티A JOIN FETCH 엔티티B FROM 엔티티A JOIN 엔티티B JOIN FETCH를 사용하면 엔티티A,엔티티B 둘 다 영속화 된다. JOIN을 사용하면 엔티티A만 영속화 된다. JOIN은 엔티

lordofkangs.tistory.com

 

연관관계있는 엔티티는 JOIN을 활용하여 다른 엔티티에 접근한다. 그렇다면 상속관계에 있는 엔티티들은 어떻게 접근할까?  JPA는 상속구조에 유용한 함수를 제공한다. 함수를 이용하면 JOIN문을 사용하지 않아도 부모가 자식에 접근할 수 있다. 

 

TYPE 

SELECT i 
FROM Item i
WHERE TYPE(i) IN (Book,Movie)

 

TYPE 함수는 부모테이블에서 특정 자식만 필터링하는 기능을 제공한다.  Item 테이블에서 Album 타입은 제외하고 DTYPE이 Book과Movie인 레코드를 필터링하여 조회할 수 있다. 

 

 

TREAT 

SELECT i
FROM Item i
WHERE TREAT(i as Book).author = 'kim'

 

 

TREAT는 일종의 캐스팅 기능을 제공한다. author는 자식인 Book 엔티티가 갖고 있다. 부모인 Item이 자식의 컬럼인 author에 접근하기 위해, Book으로 캐스팅하는 원리이다. 

 

이는 실제 쿼리로 보면 JOIN으로 구현된다. 

 

 

상속관계에 있는 엔티티는 굳이 명시적으로 JOIN을 하지 않아도 함수로 접근할 수 있다. 

 

 

 


 

참고자료

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런

www.inflearn.com

 

반응형

'JPA > JPQL' 카테고리의 다른 글

[JPA] 벌크(Bulk) 연산  (0) 2023.06.19
[JPA] Named 쿼리  (0) 2023.06.19
[JPA] 페치 조인 ( JOIN FETCH )  (0) 2023.06.15
[JPA] 묵시적 조인보다는 명시적 조인  (0) 2023.06.15
[JPA] 쿼리결과 변환하기 ( JPQL 함수 )  (0) 2023.06.14