inflearn logo
강의

講義

知識共有

実践!Spring Data JPA

@Query、値、DTOを検索する

정적 팩터리 메서드를 이용한 Dto 변환

1083

mohai

投稿した質問数 6

1

안녕하세요, 김영한님

@Query에서 Dto로 매핑해주는 과정에서 궁금한 점이 있습니다. MemberDto에 정적 팩토리 메서드를 만들어서 Member를 파라미터로 받으니 new MemberDto() 부분이 없이도 생성이 되는 것으로 보여지는데 이 과정이 이해가 되지 않습니다.

    @Query("SELECT c "
        + "FROM Coupon c "
        + "JOIN FETCH c.receiver "
        + "WHERE c.receiver = :member AND c.couponState.couponStatus = :status "
        + "ORDER BY c.couponState.meetingDate DESC")
    List<CouponResponse> findAllByReceiver(@Param("member") Member member,
                                           @Param("status") CouponStatus couponStatus){}


    public static CouponResponse of(Coupon coupon) {
        Member sender = coupon.getSender();
        Member receiver = coupon.getReceiver();
        return new CouponResponse(
            coupon.getId(),
            new CouponMemberResponse(sender.getId(), sender.getNickname(), sender.getImageUrl()),
            new CouponMemberResponse(receiver.getId(), receiver.getNickname(), receiver.getImageUrl()),
            coupon.getCouponTag(),
            coupon.getCouponMessage(),
            coupon.getCouponType().getDisplayName(),
            coupon.getCouponState().getCouponStatus().name(),
            coupon.getCouponState().getMeetingDate(),
            coupon.getCreatedTime());
    }

어떻게 정적 팩터리 메서드를 통해 생성될 수 있는 건가요?

JPA java spring spring-boot

回答 3

2

yh

안녕하세요. 현탸님

저도 정확하지는 않은데, 스프링 데이터가 of, from, valueOf 등의 메서드 이름을 가진 정적 팩터리 메서드가 있는 경우 이 정적 팩터리 메서드를 사용하는 것으로 보입니다.
(관련해서 메뉴얼이나 자료에서 내용을 찾으신 분은 공유 부탁드립니다.)

그리고 추가로 문의 주신 부분은 조회 전용의 경우 실제로 많이 사용하는 방법입니다. 단 이경우 특정 화면에 맞춘 DTO는 별도의 조회 전용 리포지토리로 분리하는 것이 더 나을 수 있습니다.

감사합니다.

1

mohai

안녕하세요, 김영한님

프로젝트를 공유하기가 어려울 것 같아서 비슷한 환경을 구축했습니다.

https://drive.google.com/file/d/10_0JV24FbOVIBthv5YvSkdxyJIYvqQu0/view?usp=sharing

1.실행 방법

test -> java.com.example.application -> MemberServiceTest 에 테스트 코드를 전체 실행해주시면됩니다.

각각의 DTO에는 of, from 정적 팩토리 메서드가 있는 경우가 있고, 메서드의 이름만 변경한 noStaticFactory 총 3가지 Dto가 있습니다.

2. 문제 상황

MemberRepository에서 MemberResponse Dto에 정적팩터리메서드가 있는 경우 매핑을 하고, 없는 경우 ConverterNotFoundException을 반환하는데 어떻게 처리되는 것인지 궁금합니다.

만약 제가 추측하는 것 처럼 정적팩터리메서드로 바로 Dto를 만들어줄 수 있다면 Repository에서 바로 Dto를 반환 하는 것에 대해서 어떻게 생각하시는지 궁금합니다.

presentation에서 반환해야할 dto를 applicationLayer -> dataAccessLayer까지 의존한다는 부분에서는 부적절하다고 생각하지만, 조회 로직의 경우 DTO를 바로 쓰는 것도 유리하지 않을까 생각이 듭니다.

1

yh

안녕하세요. 현탸님

전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요

추가로 다음 내용도 코멘트 부탁드립니다.

1. 실행 방법을 알려주세요.

2. 어떻게 문제를 확인할 수 있는지 자세한 설명을 남겨주세요.

감사합니다.

 

0

mohai

답글로 링크 공유해드립니다.

https://drive.google.com/file/d/10_0JV24FbOVIBthv5YvSkdxyJIYvqQu0/view?usp=sharing

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

67

1

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

105

3

MemberRepository 구현체

0

56

1

pdf 표현 질문드립니다.

0

60

1

로그가 남지 않는 문제.

0

79

1

테스트 라이브러리가 강의는 junit4가 맞나요??

0

70

2

pdf 파일과 차이점이 있는 것같은데 문제 없나요?

0

71

2

@PrePersist, @PreUpdate 호출 시점 질문드립니다.

0

91

2

Sort 인터페이스는 잘 사용 안하나요?

0

52

1

스캔대상 질문드립니다.

0

45

1

하이버네이트6에서의 최적화에 이은 질문

0

82

1

save() vs saveAndFlush DB 통신 횟수

0

52

1

순수 JPA 리포지토리 코드 수정부분

0

86

2

bulk연산 후 flush하는 이유를 모르겠어요

0

150

3

bulk insert 질문입니다.

0

175

2

교만했던 것 같아요.

0

145

1

RESTful 강의는 안하시는 건지 궁금합니다.

0

145

2

동적 테이블에 대한 질문

0

85

1

영속성 전이와 연관관계

0

130

2

강의 10:25 질문

0

73

1

단건 update 질문

0

95

2

엔티티 와 도메인의 경계

0

126

1

UsernameOnlyDto 타입 type mismatch 오류

0

119

1

Projection 개념과 데이터 전달과정에 대해 질문 있습니다.

0

135

1