spring/JPA
SPRING-DATA-JPA nativeQuery true에서 result처리
질주하는구
2022. 2. 7. 15:02
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을 이용 하는게 좋을거 같습니다.
반응형