• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

주문취소 로직이 이해가 안됩니다.

22.09.14 18:37 작성 조회수 256

0

@Transactional
public void cancelOrder(Long orderId){
    Order order = orderRepository.findOne(orderId);
    order.cancel();
}

OrderService에서 cancel 메서드 실행시 orderItems리스트의 재고가 변경되면서 영속성 컨텍스트 내 변경감지를 통해 update query가 실행된다 이해했습니다.

근데 이 orderItemsmappedBy 로 설정되어있는데 이 상태에서는 select query만 실행되는것 아닌가요?

이 부분때문에 주문취소 로직이 머리에 그려지지 않습니다.

답변 1

답변을 작성해보세요.

0

OMG님의 프로필

OMG

2022.09.14

안녕하세요. 정우진님, 공식 서포터즈 OMG입니다.

변경감지를 이해하셨으니,

주문상태를 setStatus로 변경(아래 코드 드래그 영역) 하기 때문에 주문취소로 주문의 상태가 변경됩니다.


image
감사합니다.

정우진님의 프로필

정우진

질문자

2022.09.14

orderItemsmappedby로 설정되어있는데 for문에 orderItem.cancel 함수를 실행할때 왜 update query가 발생하는지 궁금합니다.

제가 이해한건 Mappedy로 설정하면 select query만 가능한걸로 알고있어서요

OMG님의 프로필

OMG

2022.09.18

안녕하세요 답변이 늦었습니다.

Mappedy로 설정하면 select query만 가능 <

이 내용은 아래 영한님의 JPA책5.4.1

image

연관관계의 주인만이 데이터베이스 연관관계와 매핑된 외래 키를 관리(등록, 수정, 삭제) 할 수 있다.

반면에 주인이 아닌 쪽은 읽기만 할 수 있다. 어떤 연관관계를 주인으로 정할지는 mappedBy 속성을 사용하면 된다.

외래키에 관한 설명으로 아래 링크(영한님 강의 정리글)를 참고하시면, 해당 내용에 대한 강의에 대한 예시를 확인하실 수 있습니다.

https://friends-aihaja.tistory.com/entry/5-%EC%96%91%EB%B0%A9%ED%96%A5-%EC%97%B0%EA%B4%80%EA%B4%80%EA%B3%84%EC%99%80-%EC%97%B0%EA%B4%80%EA%B4%80%EA%B3%84-%EC%A3%BC%EC%9D%B8

주문 취소는 답변에서 말씀드린 것과 같이 영속 객체에 대한 변경감지가 동작한 것입니다.

제가

Mappedy로 설정하면 select query만 가능

이러한 기능이 있는데 제가 모르는 것일 수 있기 때문에 출처를 알려주시면 확인해보고 말씀드릴 수 있을 것 같습니다