V1, V2 실행 시 OrderItem 차이
안녕하세요.
이전 강의에서 만든 v1 API와 이번 강의에서 만든 v2 API를 각각 호출해보면, 실행된 쿼리에 차이가 있는데요~
v1에서는 order_items 테이블을 N번(2번) 조회하고, v2에서는 조회하지 않습니다. 이 차이가 왜 발생하는지 궁금합니다.
Order의 List<OrderItem> @OneToMany 매핑 시 cascade 설정을 해두었고,
v1은 Order 조회 및 lazy loading 강제 초기화 이후에 orders가 그대로 응답으로 나가는 과정에서 order_items 테이블이 조회된 걸까요?
그렇다면 v2는 응답으로 사용하는 SimpleOrderDto를 생성할 때 order.orderItems를 불러오지 않기 때문에 order_items의 데이터가 필요하지 않아서 조회 쿼리가 발생하지 않은 거라고 보면 될까요?
코드는 아래와 같습니다.

Answer 1
0
안녕하세요. 장환호님, 공식 서포터즈 y2gcoder입니다.
v1과 v2의 차이는 엔티티를 그대로 부르냐, DTO에 필요한 값만 부르냐의 차이에 집중을 해주고 있는데요,
사실 v1에서는 Hibernate5Module에서 해준 설정 때문에 프록시들이 강제로 초기화되고 있습니다.

이 설정으로 인해 json으로 로딩할 때 지연 로딩된 프록시 객체들을 강제로 초기화해서 값을 뿌려주기 때문에 v1에서는 orderitems도 초기화되어 조회 SQL이 날아간 것으로 보입니다. 전 강의 부분인 간단한 주문 조회 V1: 엔티티를 직접 노출 의 16분 경 후부터 설명을 해주고 계시죠. :)
그리고 v2에서 simpleOrderDto 에서는 말씀하신 것처럼 DTO에서 orderItems 를 부르는 게 없기 때문에 관련한 조회 SQL이 나가지 않고 있습니다.
감사합니다.
SpringBoot4 버전 Hibernate5JakartaModule 라이브러리 오류
0
42
1
@JsonIgnore 이후 Internal Server Error가 발생하지 않습니다.
0
72
3
강의 관련 외 질문입니다.
0
105
2
SpringBoot4 + Hibernate7 모듈 등록 방법 공유
2
128
1
BeanCreationException
0
110
3
Update 후 UpdateMemberResponse 매핑할 때
0
73
1
트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?
0
127
2
페이징 + 검색조건 관련해서 질문드립니다.
0
89
1
Query Dsl Q파일 질문입니다.
0
104
1
루트 쿼리라는것은
0
77
1
메서드를 분리하는 기준
0
91
1
findAllWithMemberDelivery 메서드 질문드립니다.
0
141
3
연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략
0
119
2
fetch join과 영속화와 OSIV의 관계
0
121
2
Distinct 사용 전 결과에 대한 의문
0
140
2
레포지토리 계층에서의 트랜잭션에 대한 의문
0
75
1
영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.
0
96
2
dto 필드 속 엔티티 여부
0
82
1
뷰템플릿 사용 시
0
95
2
Result 클래스 관련 질문
0
71
1
@PostConstruct 프록시 관련 질문드립니다
0
105
1
DTO 대신 Form 사용은 안되나요?
0
151
1
OSIV ON 상태일 때
1
109
1
fetch join VS fetch join 페이징 궁금증
0
210
2

