Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

JPQL 프로젝션 본문

인프런/[인프런] 자바ORM 표준 JPA 프로그래밍

JPQL 프로젝션

Seung__ 2021. 8. 16. 00:12

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


 

GitHub - bsh6463/JPQL_STUDY

Contribute to bsh6463/JPQL_STUDY development by creating an account on GitHub.

github.com

 

'인프런 > [인프런] 자바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