Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- db
- JDBC
- java
- Exception
- Proxy
- transaction
- 스프링
- Android
- 백준
- spring
- 자바
- Spring Boot
- springdatajpa
- 스프링 핵심 기능
- 그리디
- 알고리즘
- SpringBoot
- Thymeleaf
- Greedy
- 인프런
- 스프링 핵심 원리
- JPQL
- Servlet
- QueryDSL
- kotlin
- pointcut
- jpa
- AOP
- 김영한
- http
Archives
- Today
- Total
개발자되기 프로젝트
JPQL 프로젝션 본문
1. 프로젝션이란?
- SELECT 절에 조회할 대상을 지정하는 것.
- 프로젝션 대상 : 엔티티, 임베디드 타입, 스칼라 타입(숫자, 문자 등 기본 데이터 타입)
- 프로젝션한 엔티티는 영속성 컨텍스트에 의해 관리돤다.
- 따라서 SELECT를 통해 선택한 엔티티는 영속성 컨텍스트에 의해 변경되며
- SELECT m FROM Member m -> 엔티티 프로젝션
-
List<Member> result = em.createQuery("select m from Member m ", Member.class).getResultList(); Member findMember = result.get(0); findMember.setAge(20);
-
- SELECT m.team FROM Member m -> 엔티티 프로젝션
- SELECT m.address FROM Member m -> 임베디드 타입 프로젝션
- 엔티티로 부터 시작되어야 한다. m.address
-
em.createQuery("select o.address from Order o ",Address.class).getResultList();
- SELECT m.username, m.age FROM Member m -> 스칼라 타입 프로젝션
-
em.createQuery("select distinct m.username, m.age from Member m",Address.class) .getResultList();
-
- DISTINCT로 중복 제거
2. 여러 값 조회
SELECT m.username, m.age FROM Member m
- Query 타입으로 조회
-
List resultList = em.createQuery("select distinct m.username, m.age from Member m") .getResultList(); Object o = resultList.get(0); Object[] result = (Object[]) o;
-
- Object[] 타입으로 조회
-
List<Object[]> resultList = em.createQuery("select distinct m.username, m.age from Member m") .getResultList(); Object[] result = resultList.get(0);
-
- new 명령어로 조회 --> 생성자를 통한 호출.
- 단순 값을 DTO로 바로 조회 SELECT new jpabook.jpql.UserDTO(m.username, m.age) FROM Member m
- 패키지 명을 포함한 전체 클래스 명 입력
- 순서와 타입이 일치하는 생성자 필요
- 타입 명기를 못하니 Object로 받아야함
- MemberDTO
public class MemberDTO { private String username; private int age; public MemberDTO(String username, int age) { this.username = username; this.age = age; } }
- 사용예시 : 패키지명 기입 필요. 문자기 때문에 ㅋㅋ
List<MemberDTO> resultList = em.createQuery( "select new jpql.MemberDTO(m.username, m.age) from Member m", MemberDTO.class) .getResultList(); MemberDTO memberDTO = resultList.get(0);
3. GitHub : 210815 JPQL Projection
'인프런 > [인프런] 자바ORM 표준 JPA 프로그래밍' 카테고리의 다른 글
JPQL JOIN (0) | 2021.08.16 |
---|---|
JPQL 페이징 API (0) | 2021.08.16 |
JPQL 기본 문법과 기능 (0) | 2021.08.15 |
객체지향 쿼리 언어 (0) | 2021.08.14 |
[예제] 값 타입 매핑 (0) | 2021.08.14 |
Comments