김영한님의 인프런 강의와 PDF를 바탕으로 정리하였습니다.
https://www.inflearn.com/courses?s=%EA%B9%80%EC%98%81%ED%95%9C
프로젝션
프로젝션 : SELECT 절에 조회할 대상을 지정하는 것
• 프로젝션 대상: 엔티티, 임베디드 타입, 스칼라 타입(숫자, 문자등 기본 데이터 타 입)
• SELECT m FROM Member m -> 엔티티 프로젝션
• SELECT m.team FROM Member m -> 엔티티 프로젝션
• SELECT m.address FROM Member m -> 임베디드 타입 프로젝션
• SELECT m.username, m.age FROM Member m -> 스칼라 타입 프로젝션 (DISTINCT로 중복 제거)
JPQL의 결과는 영속성 컨텍스트의 관리를 받습니다.
결과를 보시면 setAge(20)에 의한 update쿼리가 나가는 것을 볼 수 있습니다.
엔티티 프로젝션
엔티티 프로젝션시 위와 같은 방법보다는 아래와 같이 join을 사용하는 방법이 좋습니다.
JPA가 보내는 쿼리는 같습니다.
임베디드 타입 프로젝션
프로젝션 - 여러 값 조회
SELECT m.username, m.age FROM Member m
1. Query 타입으로 조회
2. Object[] 타입으로 조회
3. new 명령어로 조회
아래와 같은 MemberDTO객체를 생성하여 쿼리결과를 반환하는 방식입니다.
- 단순 값을 DTO로 바로 조회
- SELECT new jpabook.jpql.UserDTO(m.username, m.age) FROM Member m
- 패키지명을 포함한 전체 클래스명 입력
- 순서와 타입이 일치하는 생성자 필요
'JPA > JPQL' 카테고리의 다른 글
JPQL 타입표현과 기타식 (0) | 2021.07.21 |
---|---|
JPQL 서브쿼리 (0) | 2021.07.21 |
JPQL 페이징, 조인 (0) | 2021.07.20 |
JPQL 기본문법과 기능 (0) | 2021.07.19 |
JPQL 객체지향 쿼리 언어 소개 (0) | 2021.07.19 |