Entity 직접 노출

  • 컬렉션인 1:N 관계를 조회하고 최적화 한다.

    • 1:N을 join 하면 데이터가 뻥튀기되어 최적화 하기가 힘들다.

@RestController
@RequiredArgsConstructor
public class OrderApiController {

    private final OrderRepository orderRepository;

    @GetMapping("/api/v1/orders")
    public List<Order> ordersV1() {
        List<Order> all = orderRepository.findAllByString(new OrderSearch());

        for (Order order : all) {
            order.getMember().getName(); // Lazy 강제 초기화
            order.getDelivery().getAddress(); // Lazy 강제 초기화
            List<OrderItem> orderItems = order.getOrderItems();
            
            // orderItem의 Item을 초기화 한다.
            orderItems.forEach(o -> o.getItem().getName()); // Lazy 강제 초기화
        }

        return all;
    }
}
  • Order - OrderItem, OrderItem - Item 관계를 가져온다.

  • 지연 로딩으로 설정한 연관 관계는 강제 초기화 한다.

    • hibernate5Module는 지연 로딩 필드를 null로 출력한다.

  • 양방향 관계는 한 쪽에 @JsonIgnore를 꼭 붙여준다.

  • Entity를 직접 노출하기 때문에 이 방법은 지양한다.

Last updated