JPQL @Query 2개 이상 프로젝션 리턴

2020. 1. 18. 09:33·Spring

JPQL @Query 메소드에서 2개 이상의 프로젝션을 리턴할 때 어떤식으로 받아야 하는지 알아볼게요!!

스프링 프로젝트를 진행중에 생겼던 이슈에 대해 적어볼까 해요!

이번 이슈는 JPQL 에 관한 이슈에요. SQL 문을 짜는 것도 고역이었는데 그 이후에도 이슈가 생겨서 정말 뚝배기 깨질뻔했네요.

먼저 대략... 2시간에 걸쳐서 겨우겨우 SQL문을 완성했어요. 이번 포스팅에 필요한 부분만 올리자면!

select me.*, me.name , count(*) from member ~ group by ~ ;

많이 생략했지만 이것만 있어도 돼요! 겨우겨우 구현한 SQL 문! Mysql Workbench 에서 실행하면 결과 잘 나옵니다.

그런데! 프로젝션이 하나인 경우만 써봤는데... 이번 SQL문은 프로젝션이 두개라 당황스러웠어요.

프로젝션이란?
SELECT 절에 조회할 대상을 지정하는 것을 프로젝션이라 해요. [SELECT {프로젝션대상} FROM]으로 대상을 선택해요. 프로젝션 대상은 엔티티, 엠비디드 타입, 스칼라 타입이 있어요.


query1

repository 인터페이스에 코드는 적어 놨는데... 여기서 멘탈 바사삭! me, count(me) 두개나 있으면... 메소드 리턴값을 뭘로 줘야하는거지...? 하고 말이죠. 몇시간동안 검색한 결과 2가지 방법을 찾았어요!

DTO를 만들어라!

me, count(me) 를 담을 객체가 필요했어요. 아래와 같이 만들어줘요!

{% codeblock %}

@Data
public class OrderMemberDto {

private Member member;
private Long countOrder;

public OrderMemberDto(Member member, Long countOrder) {
this.member = member;
this.countOrder = countOrder;
}

}

{% endcodeblock %}

위와 같이 DTO를 만들고 repository 의 메소드를 아래와 같이 바꿔주세요.

query2

그리고 아래와 같이 테스트를 돌리면! 결과가 잘 나오네요! (JUnit 이용했어요!)

query3 query4

Object[] 를 이용하는 방법!

이번에는 Object[] 를 이용하는 방법을 설명할게요! 역시 me, count(me) 를 담을 무언가가 필요해요. 이번에는 Object[] 에 넣을거에요! repository에 메소드를 아래와 같이 바꿔주세요!

query5

그리고 테스트 코드를 아래와 같이 만들어주세요. List의 size는 1이고 Object.length 는 2인 상태예요. Run 하면~~

query6

아래와 같이 결과값이 잘 나옵니다!.

query7

이상입니다!

반응형
'Spring' 카테고리의 다른 글
  • Spring Web MCV
  • JPA findOne, getOne 차이점
  • 엔티티 json 변환시 생겼던 문제
  • Application Context 에 대해서
Jadie Blog
Jadie Blog
  • Jadie Blog
    Jadie
    Jadie Blog
  • 전체
    오늘
    어제
    • 분류 전체보기 (44)
      • OOP (7)
      • DDD (1)
      • JAVA (8)
      • Spring (12)
      • Kafka (1)
      • TDD,Test (4)
      • Basic (1)
      • ETC (1)
      • MySQL (0)
      • Javascript (0)
      • Spark (3)
      • Infra (2)
      • Algorithm (0)
      • Network (1)
      • Jobs (0)
      • 일상 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

    • 휴튼
  • 공지사항

  • 인기 글

  • 태그

    Spring #ApplicationContext
    MASTER
    MSA
    JPQL
    캡슐화
    HTTP #HTTPS
    springboot
    Resilience4jFeign
    글또
    Test
    OOP
    java
    slave
    의존역전원칙
    객체지향
    OAuth2 #Spring
    Spring
    entitymanager
    routingdatasource
    localdatetime
    객체지향사실과오해
    추상클래스 #인터페이스
    테스트
    API문서
    우아한스터디
    JAVA #IO
    Kafka
    jpa
    Transactional Outbox
    메시징시스템
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Jadie Blog
JPQL @Query 2개 이상 프로젝션 리턴
상단으로

티스토리툴바