JPA
페이징 한계돌파 시, ToMany 관계를 Entity -> DTO로 표현하는 방법
쿠카이든
2022. 7. 14. 06:54
728x90
@GetMapping("/api/v3.1/orders")
public List<SimpleOrderDto> ordersV3.1() {
// ORDER 2개
// N + 1 -> 1 + 회원 N + 배송 N
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<OrderItemDto> orderItems;
public OrderDto(Order order) {
orderId = order.getId();
name = order.getMember().getName(); // LAZY 초기화
orderDate = order.getOrderDate();
orderStatus = order.getStatus();
address = order.getDelivery().getAddress(); // LAZY 초기화
orderItems = order.getOrderItems().stream()
.map(orderItem -> new OrderItemDto(orderItem)) //OrderItem 엔티티를 Dto로 변환
.collect(Collectors.toList());
}
}
@Getter
static class OrderItemDto {
private String itemName;
private int orderPrice;
private int count;
public OrderItemDto(OrderItem orderItem) {
itemName = orderItem.getItem().getName();
orderPrice = orderItem.getOrderPrice();
count = orderItem.getCount();
}
}
- ~ToMany 관계일 때, OrderDto에서 OrderItem 엔티티를 Dto로 변환하면, 전체 조회시 OrderItem이 리스트 형식으로 각각 추가로 조회된다.
728x90