인프런 커뮤니티 질문&답변

high님의 프로필 이미지
high

작성한 질문수

실전! Querydsl

프로젝션과 결과 반환 - DTO 조회

프로퍼티 접근 방법과 setter

작성

·

477

·

수정됨

1

안녕하세요 궁금한 부분이 있어 질문 남깁니다

 

7:58~ 에서

프로퍼티 접근은 setter 를 통해 값이 들어가므로
@Data 애노테이션을 지우고 직접 getter, setter를 만들어주셨습니다.

저는 setter가 없으면 오류가 날 것이라 생각하여
getter, setter를 생성하지 않고 테스트를 해보았는데 정상적으로 실행되더라고요.

 

오류가 나지 않는 게 맞는지, 그렇다면 이유가 무엇인지 궁금합니다 ㅠㅠ

 

아래는 실행한 코드입니다

public class MemberDto {

    private String username;
    private int age;

    public MemberDto() {
    }
}
@Test
public void findDtoBySetter() {
    List<MemberDto> result = queryFactory
            .select(Projections.bean(MemberDto.class,
                    member.username,
                    member.age))
            .from(member)
            .fetch();

    for (MemberDto memberDto : result) {
        System.out.println("memberDto = " + memberDto);
    }
}

 

+추가..

.....뒤늦게 MemberDto에 @ToString 을 달아 확인해보았습니다.

오류는 나지 않았지만 안에 값은 없었네요 ㅎㅎㅎ.......

 

답변 1

2

안녕하세요. high님, 공식 서포터즈 OMG입니다.
.

동일한 궁금증을 가진 수강생분이 테스트하여 질문을 남기셨고 관련하여 영한님께서 아래와 같은 답변을 남겨주셨는데요,

https://www.inflearn.com/questions/444276/dto%EB%B3%80%ED%99%98-projections-bean-%EA%B4%80%EB%A0%A8-%EC%A7%88%EB%AC%B8%EC%9E%85%EB%8B%88%EB%8B%A4

도움을 드리고 싶어 찾아보니 아래 링크에서

https://taeu.kr/49

image

직접 setter를 만들고, setter에서 호출이 되는지 로그를 찍었을 때는 setter를 호출하더라구요.

위 링크에서 확인한 것처럼 setter에 확인용 로그를 찍어서 setter가 호출되는지 확인해보시면 좋을 것 같고,

정상동작한 것은 getter/setter가 없는 경우 Projection.field처럼 리플렉션으로 필드에 직접 접근해서 가능하지 않을까 라고 "추측" 되네요.

이유를 아시는 분 계시다면 댓글 부탁드립니다 ^^!
.
감사합니다.

high님의 프로필 이미지
high
질문자

감사합니다!!

high님의 프로필 이미지
high

작성한 질문수

질문하기