프로젝션
select 절에 조회할 대상을 지정하는 것
Entity, 임베디드 타입, 스칼라 타입(숫자, 문자 등 기본 데이터 타입)이 대상이다.
distinct
를 붙여서 중복 제거를 할 수 있다.
Entity 프로젝션
m
이 Member Entity의 alias이므로 Entity 프로젝션이다.m.team
도 결과가team
Entity이므로 Entity 프로젝션에 해당한다.
Entity 프로젝션을 하면 select에 들어가는 모든 데이터가 영속성 컨텍스트에서 관리된다.
코드는 단순 select 문이지만
m.team
이 다른 테이블이므로 실제로는 join으로 나간다.이런 경우에는 그냥 join으로 명확히 써주는 것이 좋다.
select t from Member m join m.team t
안 그러면 join이 발생하는지 예측이 안된다.
임베디드 타입 프로젝션
address
같은 임베디드 타입도 가능하다.
임베디드 타입은 그 Entity에 속해있으므로 join 없이 조회한다.
임베디드 타입은 소속된 타입이므로 Entity 조회하듯 할 수 없다.
ex. select address from Address (X)
스칼라 타입 프로젝션
String, int 등의 기본 데이터 타입이 해당한다.
여러 값 조회
조회하는 데이터들의 타입이 다르거나 여러 개를 가져와야 할 때는 3가지 방법을 사용할 수 있다.
Query 타입으로 조회
Object[] 타입으로 조회
Object
타입으로 바꿔서 조회한다.
이렇게 제네릭을 이용해 바로 받아올 수도 있다.
new 명령어로 조회
Entity가 아닌 타입에 생성자로 매핑해서 가져오는 방법
순서와 타입이 일치하는 생성자가 필요하다.
패키지명.클래스명
으로 가져오기 때문에 패키지명이 길어질수록 사용하기 힘든 단점이 있다.
Last updated
Was this helpful?