/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;
}
}
order
โ member
์ order
โ address
๋ ์ง์ฐ ๋ก๋ฉ์ด๋ค.
jackson
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ํ๋ก์ ๊ฐ์ฒด๋ฅผ json์ผ๋ก ์ด๋ป๊ฒ ์์ฑํด์ผ ํ๋์ง ๋ชจ๋ฅด๋ฏ๋ก, ์์ธ๊ฐ ๋ฐ์ํ๋ค.Hibernate5Module
์ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋กํ๋ฉด ํด๊ฒฐ(์คํ๋ง ๋ถํธ ์ฌ์ฉ์ค)ํ์ด๋ฒ๋ค์ดํธ ๋ชจ๋ ๋ฑ๋ก
โ ์คํ๋ง ๋ถํธ 3.0 ์ด์: Hibernate5JakartaModule
๋ฑ๋ก
build.gradle
์ ๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ค.
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-hibernate5-jakarta'
JpashopApplication
์ ๋ค์ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค.
@Bean
Hibernate5JakartaModule hibernate5Module() {
return new Hibernate5JakartaModule();
}