인프런 커뮤니티 질문&답변
쿼리가 6번이 아니라 3번만 출력 되요
작성
·
189
0
지금 코드가 아래 같은데 sql이 총 6번 찍혀야 되는데 3번만 찍혀서여 오더 두번 아이템 4번 이렇게 총 6개여야 하는데 오더 한번 아이템 두번 총3번만 찍히는데 뭐가 잘못된 것일까여?
@GetMapping("/api/v3.1/orders")
public List<OrderDto> ordersV3_page() {
List<Order> orders = orderRepository.findAllWithMemberDelivery();
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();
orderDate = order.getOrderDate();
orderStatus = order.getStatus();
address = order.getDelivery().getAddress();
// 주문 아이템 정보에 대한 프록시 초기화 구문
// order.getOrderItems().stream().forEach(o-> o.getItem().getName());
// orderItems = order.getOrderItems();
orderItems = order.getOrderItems().stream()
.map(orderItem -> new OrderItemDto(orderItem))
.collect(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();
}
}
ex2)
public List<Order> findAllWithMemberDelivery() {
return em.createQuery(
"select o from Order o" +
" join fetch o.member m" +
" join fetch o.delivery d", Order.class
).getResultList();
}
post 맨 요청 결과:
url:
http://127.0.0.1:8080/api/v3.1/orders/
result:
[
{
"orderId": 4,
"name": "userA",
"orderDate": "2021-01-27T03:46:24.680706",
"orderStatus": "ORDER",
"address": {
"city": "서울",
"street": "1",
"zipcode": "1111"
},
"orderItems": [
{
"itemName": "JPA1 BOOK",
"orderPrice": 10000,
"count": 1
},
{
"itemName": "JPA2 BOOK",
"orderPrice": 20000,
"count": 2
}
]
},
{
"orderId": 11,
"name": "userB",
"orderDate": "2021-01-27T03:46:24.767473",
"orderStatus": "ORDER",
"address": {
"city": "진주",
"street": "2",
"zipcode": "2222"
},
"orderItems": [
{
"itemName": "SPRING1 BOOK",
"orderPrice": 20000,
"count": 3
},
{
"itemName": "SPRING2 BOOK",
"orderPrice": 40000,
"count": 4
}
]
}
]
답변 1
0
김영한
지식공유자
안녕하세요. terecal님
쿼리가 총 3번 호출되는 것이 맞습니다^^
처음 쿼리는 order들을 한번에 조회합니다. -> selelct * form order -> 주문 결과 2개
1번 쿼리 -> order조회: 결과 order2개
"orderId": 4
-> 2번 쿼리 orderItem 쿼리: 결과 상세 아이템2개
"orderId": 11
-> 3번 쿼리 orderItem 쿼리: 결과 상세 아이템2개
감사합니다.





