BE전문가 프로젝트

프로젝션 본문

JPA

프로젝션

원호보고서 2022. 11. 6. 22:01
  • 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