• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

GET /api/v2/orders 조회 관련 질문

22.04.29 19:35 작성 조회수 284

0

@GetMapping("/api/v2/orders")
    public List<OrderDto> ordersV2() {
        List<Order> orders = orderRepository.findAllByString(new OrderSearch());
        List<OrderDto> result = orders.stream()
                .map(
                        o -> new OrderDto(o)
                )
                .collect(Collectors.toList());
        return result;
    }

    @Data
    static class OrderDto {
        private Long orderId;
        private String name;
        private LocalDateTime orderDate;
        private OrderStatus orderStatus;
        private Address address;
        private List<OrderItem> orderItems;

        public OrderDto(Order order) {
            orderId = order.getId();
            name = order.getMember().getName();
            orderDate = order.getOrderDate();
            orderStatus = order.getStatus();
            address = order.getDelivery().getAddress();
            order.getOrderItems().stream().forEach(o -> o.getItem().getId());
            orderItems = order.getOrderItems();
        }
    }

위 코드에서 OrderDto 생성자 함수 내에 getOrderItem 요소들을 순회시, 각 아이템을 get후에 getId를 호출 할 때 각 item 프록시들이 초기화 돼야 하는 것 아닌가요..? 강의에서는 getName을 통해 초기화 하길래, 위 코드처럼 getId로 하면 될까 궁금증이 생겨 실행해보니 

orderItems 내에 item 이 null 값으로 나옵니다. getName 으로 초기화 할 때는 전부 다 들어있구요.

코드 구글 드라이브 링크: https://drive.google.com/drive/folders/17gdIodVzIPG8_XzTeYUVDbLdaScP6c2s

답변 1

답변을 작성해보세요.

2

y2gcoder님의 프로필

y2gcoder

2022.04.29

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

먼저 깔끔하게 정리한 글이 있어 공유드립니다.

요약해서 말씀드리자면, 프록시는 이미 식별자 값을 보관하고 있기 때문에 getId()로는 초기화가 되지 않은 것으로 보입니다. 그래서 영한님께서도 pk가 아닌 name으로 프록시 초기화를 한 게 아닐까 생각합니다!

감사합니다.

푸헹헹님의 프로필

푸헹헹

질문자

2022.04.29

수고 많으십니다! 친절한 답변 감사드립니다.