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
'JPA' 카테고리의 다른 글
@Transactional(rollbackFor = Exception.class) 에 대해 (0) | 2022.08.26 |
---|---|
(Spring Data JPA)리스트에서 첫번째 값만 가져오기 (0) | 2022.08.24 |
JPA 낙관적 락(부제 - OPTIMISTIC) (0) | 2022.06.22 |
@CreatedBy, @ModifiedBy 사용하기 (0) | 2022.06.21 |
@Converter (부제 - 데이터 변환) (0) | 2022.06.21 |