강의

멘토링

커뮤니티

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

Gretel님의 프로필 이미지
Gretel

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

주문 조회 V2: 엔티티를 DTO로 변환

5:05 부분 질문 있습니다.

작성

·

208

0

OrderDto 클래스의 어노테이션을 @Data로 해주면 orderItems의 json 정보가 postman에서 보여지는데 정확히 어떤 이유로 이게 가능한건가요?
Getter로 다시 바꾸니 Null로 출력이 되는데 그 이유가 궁금합니다.

답변 1

0

안녕하세요, Gretel 님. 공식 서포터즈 codesweaver 입니다.
.
OrderDto의 상단에 애노테이션을 @Data 혹은 @Getter로 붙이셨다면

결과값이 Null이 아닌 정상적인 값 조회가 되어야 합니다.

혹시 강의와 작성하신 코드가 다른점이 있는지 확인하여 주시기 바랍니다.

.

좀더 정확한 파악을 위해 소스코드를 구글 드라이브에 공유해주시기 바랍니다.
.
감사합니다.

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

강의에서는 null로 나오는데요..? 어노테이션을 getter로 했을때는  postman에서 orderItems가 강의에서 처럼 null로 나오고 @Data로 했을때는 orderItems의 값이 조회됩니다. 

아하, orderItems 부분이 null로 나온다고 질문하신 내용이군요.

 

해당 부분은 LazyLoading과 관련이 있습니다. 

해당 강의 5:40초즈음 orderItems 를 순회하면서 getNames()를 호출 하는 부분이 나옵니다.

orderItems 는 엔티티 이고 사용하기 전에는 JPA에서 쿼리 최적화를 위해 즉시 로딩하지 않습니다.

그래서 강제로 엔티티를 로딩하도록 코드를 수정하는 부분을 확인하실 수 있습니다.

 

감사합니다.

@Data일때는 조회가 되는 것에 대한 답변을 안했네요.

 

@Data를 선언한 경우,

equals() 및 hashcode() toString() 등의 메서드를 오버라이딩 하게 되는데요.

이 메서드들은 필드 변수의 값을 이용해야 하는 메서드입니다.

이 메서드를 오버라이딩 하면서 orderItems의 엔티티 조회가 발생하는 것으로 판단합니다.

Gretel님의 프로필 이미지
Gretel

작성한 질문수

질문하기