new 패키지명.Dto명 생략가능
2
작성한 질문수 3
JPQL에서 DTO를 조회할 때 new 패키지명.DTO명(...) 을 생략하고 바로 select m.id, m.name, t.name 이렇게 작성해도 DTO로 반환이 되는데 원래 가능한 내용인가요??
@Query("select new study.datajpa.dto.MemberDto(m.id, m.name, t.name) from Member m join m.team t")
List<MemberDto> findMemberDto();
@Query("select m.id, m.name, t.name from Member m join m.team t")
List<MemberDto> findMemberDtoNot();
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. devwj20님
JPQL에서 DTO를 조회할 때 new 패키지명.DTO명(...) 형태로 명시적으로 선언해준 이유는, JPQL은 일반 SQL과 달리 객체 지향적인 조회를 지원하기 때문에 원하는 DTO의 생성자를 통해 직접적으로 객체를 생성하여 반환하기 위함입니다.
당연히 @Query를 사용할 때 두 번째 예시처럼 단순히 여러 필드를 반환하는 형태를 사용할 수 있지만, 이 경우 List<Object[]> 형태로 결과가 반환됩니다. 이 경우 개발자가 직접 각 배열을 순회하여 필요한 정보를 DTO에 세팅해야 하며, DTO를 자동으로 반환하지 않으니 유의해야 합니다.
아래는 관련된 유사 질문 및 답변을 찾았습니다:
- DTO 조회시 nativeQuery=true 옵션: DTO 조회 시의 오류에 대한 다양한 해결 방법을 제공합니다.
- DTO 생성을 위한 JPQL 문법 이해: JPQL의
new키워드와 DTO 생성에 대한 이해를 돕는 설명입니다.
이에 따라 select new DTO 구문은 DTO를 자동으로 생성할 때 사용하며, 두 번째 예시에서는 수동으로 DTO 객체를 만들어야 함을 기억해 주세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
changeTeam 메서드 질문
0
50
1
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
92
1
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
133
3
MemberRepository 구현체
0
79
1
pdf 표현 질문드립니다.
0
81
1
로그가 남지 않는 문제.
0
107
1
테스트 라이브러리가 강의는 junit4가 맞나요??
0
93
2
pdf 파일과 차이점이 있는 것같은데 문제 없나요?
0
88
2
@PrePersist, @PreUpdate 호출 시점 질문드립니다.
0
111
2
Sort 인터페이스는 잘 사용 안하나요?
0
64
1
스캔대상 질문드립니다.
0
60
1
하이버네이트6에서의 최적화에 이은 질문
0
100
1
save() vs saveAndFlush DB 통신 횟수
0
69
1
순수 JPA 리포지토리 코드 수정부분
0
97
2
bulk연산 후 flush하는 이유를 모르겠어요
0
167
3
bulk insert 질문입니다.
0
206
2
교만했던 것 같아요.
0
159
1
RESTful 강의는 안하시는 건지 궁금합니다.
0
166
2
동적 테이블에 대한 질문
0
95
1
영속성 전이와 연관관계
0
153
2
강의 10:25 질문
0
81
1
단건 update 질문
0
104
2
엔티티 와 도메인의 경계
0
137
1
UsernameOnlyDto 타입 type mismatch 오류
0
125
1





