nativeQuery를 true로 설정 후 결과 값을 Map이 아닌 dto 형식으로 넘기고자 하는 경우 interface를 활용 할 수 있습니다.
아래와 같은 쿼리문 실행 후 결과를 담을
@Query(value = "SELECT MAX(BBS_ITEM_LIST_ORDER) as listOrder, MAX(BBS_ITEM_MINI_ORDER) as miniListOrder, MAX(BBS_ITEM_VIEW_ORDER) as viewOrder FROM T_BBS_ITEM WHERE BBS_SET_SEQ = :bbsSetSeq" , nativeQuery = true)
public BbsItemInf getMaxOrderSub(@Param("bbsSetSeq") Integer bbsSetSeq);
interface를 생성 합니다.
public interface BbsItemInf {
Integer getListOrder();
Integer getminiListOrder();
Integer getviewOrder();
}
생성한 interface는 아래와 같이 받아서 메소드를 호출 해 바로 사용 가능 합니다.
BbsItemInf bbsItemInf = bbsItemRepository.getMaxOrderSub(2);
System.out.println("bbsItemInf: "+bbsItemInf.getListOrder());
데이터 설정은 as 이름으로 설정 됩니다.(아래 stackorverflow내용보면 match by order not by name 이런 내용이 있는데
이건 답변 하신분이 쿼리문 작성시에 as를 하지 않고 컬럼명만 작성해서 순차적으로 데이터 셋팅이 되는 경우로 보입니다.)
stackorverflow의 질문 답변에 보면 이런식의 사용의 경우 내부적으로 DTO로 바로 넘기는 방식에 비해서 자원
낭비가 많다는 이야기가 있어 확실 한 테스트가 필요 합니다.
특별한 경우가 아니라면 가능하면 map을 이용 하는게 좋을거 같습니다.
반응형
'spring > JPA' 카테고리의 다른 글
이클립스 spring-boot queryDsl gradle 설정 (0) | 2022.03.04 |
---|---|
JPA-DATA @ManyToOne 삭제시 부모참조(연결 컬럼 UPDATE) 문제 (0) | 2021.07.27 |
JPA-DATA에서 @Query-Map을 이용해서 데이터를 가지고 오는 경우 (0) | 2021.07.27 |
JPA-DATA 한 컬럼만 가지고 오기-nativeQuery 옵션 (0) | 2021.07.27 |
jpa-data에서 테이블을 oracle의 start with 처럼 재귀적으로 호출 하기 위해 self join 하는 경우 (0) | 2021.06.11 |