
위 코드는 서비스 계층에서 주문을 담당하는 메소드이다.
Order에는 CascadeType.ALL로 설정되어 있다
44번줄 orderRepository.save(order) 에서는 연관관계에 있는 OrderItem과 Delivery를 따로 persist해주지 않아도 같이 영속화 된다.
비즈니스 요구사항에 따라 달라질 수 있는 부분이지만, 중요한 점은 JPA에서 이런식으로 자동으로 연관관계가 있는 객체들을 같이 데이터 영속화를 할 수 있다는 것이다.
MyBatis로 한다면? Order, Delivery, OrderItem을 모두 따로 DAO에서(interface, .xml) 영속화 시키고 return order.getId()부분도 따로 LAST_INSERT_ID()등과 같이 디비 벤더에 맞는 함수를 또 작성ㅎ서 들고와야 할 것이다.

위 코드는 Order를 취소하는 것이다
order.cancel()로 들어가보자.

orderItem.cancel() 로 들어가보자.

주문을 취소하는 로직에는 위와 같이 몇몇 정보들을 업데이트 해주어야한다.
JPA 같은 경우엔 그냥 order.cancel()만 때리면 된다.
MyBatis? 한줄 한줄 모두 일일이 쿼리를 작성해서 업데이트해주어야한다.
무려 3개 쿼리를 만들어주어야하고 이를 관리해주어야한다
MyBatis만 쓰던 나는 이게 얼마나 신기하고 기가막히는지 모르겠다.
레퍼런스: 인프런 - 김영한님 JPA 활용 1편