🖊 프로젝션
- SELECT 절에 조회할 대상을 지정하는 것
- 프로젝션 대상은 엔티티, 임베디드 타입, 스칼라 타입(기본 데이터)
- 가져온 엔티티의 개수와 상관없이 모두 영속성 컨텍스트에서 관리된다.
select m from Member m // 엔티티 프로젝션
select m.address from Member m // 임베디드 타입 프로젝션
select m.username from Member m // 스칼라 타입 프로젝션
// 명시적 조인
select t from Member m join m.team t
// 묵시적 조인
select m.team from Member m
🖊 페이징 API
- JPA에는 페이징을 두 개의 API로 추상화한다.
- setFirstResult : 조회 시작 위치 지정
- setMaxResults : 조회할 데이터 수 지정
- 패치 조인과 같이 사용할 수 없으므로 @BatchSize를 지정해주면
쿼리를 지정해둔 개수만큼 날려 즉시 로딩의 효과를 얻을 수 있다.
🖊 조인
"select m from Member m join m.team t where t.name = :teamName";
// teamName은 파라미터로 받는 값
"select m from Member m left join m.team t;
"select m from Member m , Team t where m.username = t.name"
- ON절은 연관관계가 없는 엔티티의 외부 조인을 지원한다.
- ON절을 활용한 조인
회원과 팀을 조인하면서, 팀 이름이 A인 팀만 조인
JPQL:
"select m, t from Member m left join m.team t on t.name = 'A'"
SQL:
select m.*, t.* from Member m left join t on m.TEAM_ID = t.id and t.name = 'A'
회원의 이름과 팀의 이름이 같은 대상 외부 조인
JPQL: select m, t from Member m left join Team t on m.username = t.name
SQL : select m.*, t.* from Member m left join Team t on m.username = t.name