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
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 |
댓글