Free Lines Arrow
본문 바로가기
DataBase/JPA

[JPA] JPQL 프로젝션

by skahn1215 2021. 9. 24.
728x90
반응형

프로젝션

  • 프로젝션?? 처음듣는 나도 무슨말인가 했다?
  • 단순한 설명으로는 SELECT 절에 조회할 대상을 지정하는 것이다.

 

 

프로젝션의 대상

  • Entity Type
    - 실제 객체타입으로 조회한다.
    - Select m From Member m
  • Embedded Type
    - 임베디드로 정의한 클래스를 조회한다.
    - address 는 임베디드 타입으로 정의해주었다.
    - Select m.address From Member m 

  • Scalar Type
    - 속성 데이터를 사용자 마음대로 가져온다.
    - Select m.username, m.age From Member m

 

 

Entity Type 프로젝션 예제

  • 반환할 타입을 Member.class 로 지정해준다.
  • 리턴타입을 받을때로 Memeber 로 받는다.
List <Member> entityResult1 = em.createNativeQuery("select MEMBER_ID, USER_NAME from Member",Member.class)
 .getResultList();

 

 

Embedded Type 프로젝션 예제

Address Class

import javax.persistence.Embeddable;
@Embeddable
public class Address {
    private String city;
    private String street;
    private String zipcode;
}

 

Member Class

import javax.persistence.*;

@Entity
@Table(name = "ORDERS")
public class Order {

    @Id @GeneratedValue
    private Long id;
    private int orderAmount;

    @Embedded
    private Address address;

    @ManyToOne
    @JoinColumn(name = "PRODUCT_ID")
    private Product product;
}

 

 

Embedded Type 조회

//임베디드 프로젝션
List<Address> resultList = em.createQuery("select m.address from Order m", Address.class)
            .getResultList();

 

 

Scalar Type 프로젝션 예제

 

Object[] 로 조회하는법

List<Object[]> scalarResult = em.createQuery("select m.username, m.age from Member m")
    .getResultList();

// object 배열로 조회
Object[] objArray = scalarResult.get(0);
System.out.println("resultList1 = " + objArray[0]);
System.out.println("resultList1 = " + objArray[1]);

 

 

new 를 이용하여 조회하는 방법

  • 쿼리문에 패키지명이 다 들어가야한다.
  • new 를 써줘야 한다.
  • 반드시 생성자가 있어야한다.
// new 를 이용하여 조회
// 쿼리문에 new 를 써줘야한다. 패키지명이 다들어가야 한다.
List<MemberDTO> dtoResult = em.createQuery("select new jpql.MemberDTO(m.username, m.age)from JPQLMember m", MemberDTO.class)
            .getResultList();

MemberDTO memberDTO = dtoResult.get(0);
System.out.println("MemberDTO = " + memberDTO.getUsername());
System.out.println("MemberDTO = " + memberDTO.getAge());

 

 

 

 

 

 

참고

https://www.inflearn.com/course/ORM-JPA-Basic/lecture/21719?tab=note 

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 학습 페이지

지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요....

www.inflearn.com

 

728x90
반응형

'DataBase > JPA' 카테고리의 다른 글

[JPA] JPQL 조인, 서브쿼리  (0) 2021.09.24
[JPA] JPQL 페이징  (0) 2021.09.24
[JPA] JPQL 문법  (0) 2021.09.23
[JPA] JPQL 이란?  (0) 2021.09.23
[JPA] 값타입 컬렉션  (0) 2021.09.17

댓글