프로젝션 ?
SELECT 절에 조회할 대상을 지정하는 것을 프로젝션이라 하고
{ SELECT {프로젝션 대상} FROM } 으로 대상을 선택한다.
🔴 프로젝션 대상
- 엔티티
- 엠비디드 타입
- 스칼라
- 숫자, 문자 등 기본 데이터 타입
🔴 엔티티 프로젝션
SELECT m FROM Member m
SELECT m.team FROM Member m
둘 다 엔티티를 프로젝션 대상으로 사용한다.
쉽게 생각하면 원하는 객체를 바로바로 조회한다는 것이다.
컬럼을 하나하나 나열에서 조회해야 하는 SQL 과 차이가 있다.
참고로 이렇게 조회한 엔티티는 영속성 컨텍스트에서 관리 된다.
🔴 임베디드 타입 프로젝션
JPQL 에서 임베디드 타입은 엔티티와 거의 비슷하게 사용된다.
임베디드 타입은 조회의 시작점이 될 수 없다는 제약이 있다.
다음은 임베디드 타입인 Address 를 조회의 시작점으로 사용해서 잘못된 쿼리다.
String query = "SELECT a FROM Adress a"
다음 코드에서 Order 엔티티가 시작점이다.
이렇게 엔티티를 통해서 임베디드 타입을 조회할 수 있다.
String query = "SELECT o.address FROM Order o"
List<Address> addresses = em.createQuery( query, Address.class ).getResultList();
실행된 SQL 은 다음과 같다.
SELECT order.city
, order.street
, order.zipcode
FROM Orders order
임베디드 타입은 엔티티 타입이 아닌 값 타입이다.
따라서 이렇게 직접 조회한 임베디드 타입은 영속성 컨텍스트에서 관리되지 않는다.
🔴 스칼라 타입 프로젝션
숫자, 문자, 날짜와 같은 기본 데이터 타입들을 스칼라 타입이라 한다.
예를 들어 전체 회원의 이름을 조회하려면 다음처럼 쿼리하면 된다.
List <String> usernames = em.createQuery("SELECT username FROM Member m", String.class ).getResultList();
'개발중 > Java Persistence API (JPA)' 카테고리의 다른 글
[JPA] 연관 관계 정리 (0) | 2021.08.15 |
---|---|
JPQL JOIN (0) | 2021.07.01 |
JPA - 결과 조회 getResultList/getSingleResult (0) | 2021.07.01 |
JPA - 파라미터 바인딩 (0) | 2021.07.01 |
🟡 Criteria이란 ? (0) | 2021.07.01 |