๐ŸŒฑย API ๊ฐœ๋ฐœ ๊ณ ๊ธ‰ - ์ง€์—ฐ ๋กœ๋”ฉ๊ณผ ์กฐํšŒ ์„ฑ๋Šฅ ์ตœ์ ํ™”

๊ฐ„๋‹จํ•œ ์ฃผ๋ฌธ ์กฐํšŒ V1: ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ง์ ‘ ๋…ธ์ถœ

/api/OrderSimpleApiController.java

import jpabook.jpashop.domain.Order;
import jpabook.jpashop.repository.OrderRepository;
import jpabook.jpashop.repository.OrderSearch;
import lombok.RequiredArgsConstructor;
import org.aspectj.weaver.ast.Or;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * xToOne(ManyToOne, OneToOne)
 * Order
 * Order -> Member
 * Order -> Delivery
 */
@RestController
@RequiredArgsConstructor
public class OrderSimpleApiController {

    private final OrderRepository orderRepository;

    /**
     * V1. ์—”ํ‹ฐํ‹ฐ ์ง์ ‘ ๋…ธ์ถœ
     * - Hibernate5Module ๋ชจ๋“ˆ ๋“ฑ๋ก, LAZY = null ์ฒ˜๋ฆฌ
     * - ์–‘๋ฐฉํ–ฅ ๊ด€๊ณ„ ๋ฌธ์ œ ๋ฐœ์ƒ -> @JsonIgnore
     */
    @GetMapping("/api/v1/simple-orders")
    public List<Order> ordersV1() {
        List<Order> all = orderRepository.findAllByString(new OrderSearch());
        for (Order order : all) {
            order.getMember().getName(); // Lazy ๊ฐ•์ œ ์ดˆ๊ธฐํ™”
            order.getDelivery().getAddress(); // Lazy ๊ฐ•์ œ ์ดˆ๊ธฐํ™”
        }
        return all;
    }
}

ํ•˜์ด๋ฒ„๋„ค์ดํŠธ ๋ชจ๋“ˆ ๋“ฑ๋ก

โ†’ ์Šคํ”„๋ง ๋ถ€ํŠธ 3.0 ์ด์ƒ: Hibernate5JakartaModule ๋“ฑ๋ก

@Bean
Hibernate5JakartaModule hibernate5Module() {
		return new Hibernate5JakartaModule();
}