너무나도 신기하고 재밌는 JPA

Kyu·2022년 8월 6일
0

JPA

목록 보기
2/2

1


위 코드는 서비스 계층에서 주문을 담당하는 메소드이다.

Order에는 CascadeType.ALL로 설정되어 있다
44번줄 orderRepository.save(order) 에서는 연관관계에 있는 OrderItemDelivery를 따로 persist해주지 않아도 같이 영속화 된다.

비즈니스 요구사항에 따라 달라질 수 있는 부분이지만, 중요한 점은 JPA에서 이런식으로 자동으로 연관관계가 있는 객체들을 같이 데이터 영속화를 할 수 있다는 것이다.

MyBatis로 한다면? Order, Delivery, OrderItem을 모두 따로 DAO에서(interface, .xml) 영속화 시키고 return order.getId()부분도 따로 LAST_INSERT_ID()등과 같이 디비 벤더에 맞는 함수를 또 작성ㅎ서 들고와야 할 것이다.

2


위 코드는 Order를 취소하는 것이다

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

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

주문을 취소하는 로직에는 위와 같이 몇몇 정보들을 업데이트 해주어야한다.
JPA 같은 경우엔 그냥 order.cancel()만 때리면 된다.

MyBatis? 한줄 한줄 모두 일일이 쿼리를 작성해서 업데이트해주어야한다.

  1. 먼저 상태비교를 위해 delivery.status 를 조회
  2. OrderStatus를 CANCEL로 업데이트
  3. 마지막에 해당 OrderItem에 연관되어 있는 Item의 수량을 업데이트

무려 3개 쿼리를 만들어주어야하고 이를 관리해주어야한다

MyBatis만 쓰던 나는 이게 얼마나 신기하고 기가막히는지 모르겠다.


레퍼런스: 인프런 - 김영한님 JPA 활용 1편

profile
TIL 남기는 공간입니다

0개의 댓글