BE전문가 프로젝트
프로젝션 본문
- select 절에 조회할 대상을 지정하는 것
- 프로젝션 대상: 엔티티, 임베디드 타입, 스칼라 타입(숫자, 문자등 기본 데이터 타입)
- SELECT m FROM Member m -> 엔티티 프로젝션
- SELECT m.team FROM Member m -> 엔티티 프로젝션
- SLECT m.address FROM M m -> 임베디드 타입 프로젝션
- SELECT m.username, m.age FROM Member m -> 스칼라 타입 프로젝션
- DISTINCT로 중복 제거
엔티티 프로젝션
List<Member> result = em.createQuery("select m from Member m", Member.class)
.getResultList();
임베디드 타입 프로젝션
List<Address> result = em.createQuery("select o.address from Order o", Address.class)
.getResultList();
스칼라 타입 프로젝션
List<Member> result = em.createQuery("select m.username, m.age from Member m", Member.class)
.getResultList();
프로젝션 - 여러 값 조회
SELECT m.username, m.age FROM Member m
1. Query 타입으로 조회
2. Object[] 타입으로 조회
3. new 명령어로 조회
- 단순 값을 DTO로 바로 조회 SELECT new jpabook,jpql.UserDTO(m.username, m.age) FROM Member m
- 패키지 명을 포함한 전체 클래스 명 입력
- 순서와 타입이 일치하는 생성자 필요
Query 타입으로 조회
List result = em.createQuery("select m.username, m.age from Member m")
.getResultList();
Object o = result.get(0);
Object[] resultList = (Object[]) o;
타입을 지정하지 못하니까 Object 배열로 지정해야 한다.
Object[] 타입으로 조회
List<Object[]> result = em.createQuery("select m.username, m.age from Member m")
.getResultList();
Object[] resultList = (Object[]) result.get(0);
new 명령어로 조회
List<MemberDTO> result = em.createQuery("select new jpql.MemberDTO(m.username, m.age) from Member m"
, MemberDTO.class)
.getResultList();
MemberDTO resultList = result.get(0);
생성자를 통해서 호출이 된다
'JPA' 카테고리의 다른 글
Join (0) | 2022.11.06 |
---|---|
페이징 API (0) | 2022.11.06 |
JPQL(Java Persistence Query Language) (0) | 2022.11.06 |
객체지향 쿼리 언어 (0) | 2022.11.06 |
값 타입 컬렉션 (0) | 2022.11.02 |
Comments