Bài viết
Hỏi & Đáp
order.getOrderItems() 시 필드 접근 안했는데 select문이 나가는 이유
아 !! 이해 완료했습니다 !!저와 같은 궁금증을 가지고 있으실 분들은 위해 아래와 같이 정리하였습니다.order.getOrderItems().getXxx() 및 order.getOrderItems()를 호출하지도 않았는데 DB에 orderItem SELECT 절이 나가는 이유는 ?일단, Jackson이 JSON으로 직렬화 할 때 "public getXxx()" 메서드들을 전부 뒤져서 값을 꺼내옵니다. @Getter도 포함입니다 ! 근데 orderItems, member, delivery는 LAZY 설정이 되어 있기 때문에 SELECT 절이 나가지 않는게 정상입니다. 하지만, 아래 코드를 보시면 Order 클래스에 getTotalPrice()에 반복문을 통해 orderItem을 순회하고 있습니다. 이로 인해 OrderItem을 조회하기 위해 SELECT절을 보내는겁니다. public int getTotalPrice() { int totalPrice = 0; for (OrderItem orderItem : orderItems) { totalPrice += orderItem.getTotalPrice(); } return totalPrice; }따라서 위 메서드에 @JsonIgnore을 설정 할 시 Jackson은 해당 메서드를 무시하게 되므로 SELECT절이 나가지 않습니다. !! getTotalPrice()를 @JsonIgnore 설정을 하지 않아서 SELECT절이 나갔음에도 불구하고 JSON 응답 값 이 "orderItems" : null 인 이유는? 먼저 Jackson이 기본적으로 다음과 같은 순서로 처리됩니다. getter 메서드 중 프로퍼티 메서드들을 먼저 처리하고 다음 getXxx로 명시되어 있는 메서드들을 처리합니다. 따라서, getOrderItems()를 만났는데 LAZY 상태니까 null로 직렬화를 합니다. 그 다음에야 getTotalPrice()를 호출하면서 OrderItems 컬렉션을 초기화해서 SQL이 나가는 겁니다.
- 0
- 2
- 57
Hỏi & Đáp
글로벌 Validatior, Bean Validation
2번에서 그럼 데이터 바인딩 단계에서 필드 오류가 발생하면 글로벌 Bean Validation이 작동한다는 의미가 아닌가요 ? 이해를 못했습니다..
- 0
- 2
- 152