본문 바로가기
공부/Spring

@Query를 통해 DTO로 조회해보자

by JERO__ 2022. 8. 25.

먼저 예시를 살펴보자

  • select이후 new 명령어를 사용한다. 생성자가 맞는 DTO가 필요하다. 위의 예시일 때 DTO는 다음과 같다.
public class MemberDto {

	private Long id;
	private String username;
	private String teamName;

	public MemberDto(Long id, String username, String teamName) {
	this.id = id;
	this.username = username;
	this.teamName = teamName;
	}
}

 

만약 Enum을 통해 비교한다면 어떻게 사용해야 할까?

@Query(value = "select distinct new com.woowacourse.naepyeon.service.dto.WrittenMessageResponseDto"
        + "(m.id, r.id, r.title, t.id, t.name, m.content, m.color, "
        + "case when r.recipient = com.woowacourse.naepyeon.domain.rollingpaper.Recipient.MEMBER then p.nickname "
        + "when r.recipient = com.woowacourse.naepyeon.domain.rollingpaper.Recipient.TEAM then t.name "
        + "else '' end) "
        + "from Message m"
        + ", Rollingpaper r"
        + ", Team t"
        + ", TeamParticipation p "
        + "where m.rollingpaper.id = r.id "
        + "and r.team.id = t.id "
        + "and p.team.id = t.id "
        + "and m.author.id = :authorId "
        + "and (p.member.id = r.member.id or r.member.id is null)")
Page<WrittenMessageResponseDto> findAllByAuthorId(@Param("authorId") final Long authorId, final Pageable pageRequest);

위와 같이 주소.enum값 을 통해 나타내자

댓글