본문 바로가기

강의 내용 정리/스프링부트와 JPA 활용 1

6-3. 주문 서비스 개발

주문 할 떄 주문회원, 상품명, 주문수량 넘어오는데 이 떄 주문 회원, 상품명은 각각의 Id로 넘어온다.

그걸 여기서 받는다.

 

 

 

 

 

 

 

# OrderService.java

 

Order.java

여길 보면 OrderItem, Delivery가 Cascade 옵션이므로 Order만 persist 해주면 자동으로 OrderItem, Delivery도 persist 해준다.(jpa에 넣어둠 = 영속성 컨텍스트에 저장 = persist)

여길 보면 OrderItem, Delivery가 Cascade 옵션이므로 Order만 persist 해주면 자동으로 OrderItem, Delivery도 persist 해준다.(jpa에 넣어둠 = 영속성 컨텍스트에 저장 = persist)

여길 보면 OrderItem, Delivery가 Cascade 옵션이므로 Order만 persist 해주면 자동으로 OrderItem, Delivery도 persist 해준다.(jpa에 넣어둠 = 영속성 컨텍스트에 저장 = persist)

여길 보면 OrderItem, Delivery가 Cascade 옵션이므로 Order만 persist 해주면 자동으로 OrderItem, Delivery도 persist 해준다.(jpa에 넣어둠 = 영속성 컨텍스트에 저장 = persist)

여길 보면 OrderItem, Delivery가 Cascade 옵션이므로 Order만 persist 해주면 자동으로 OrderItem, Delivery도 persist 해준다.(jpa에 넣어둠 = 영속성 컨텍스트에 저장 = persist)

 

 

 

# cascade 범위에 대한 고민

 

cascade 범위에 대한 고민 : order -> orderitem, order-> delivery 정도에서는 사용좋음.
* ->   참조하는 주인이 private 오너일때만 사용: orderitem, delivery 는 order에서만 참조해서 씀.
*        ( orderitem이 다른걸 참조할 순 있지만 orderitem을 참조하는 건 order밖에 없음.

 

 

 

 

주문을 저장 할 때 cascade 옵션이 있어서 order가 persist될 떄 orderitem, delivery도 자동으로 persist됨.

=> DB테이블에 INSERT됨. 

=> 물론 트랜잭션이 commit되는 시점에 flush가 일어나면서 INSERT쿼리가 DB에 날라간다.

 

 

 

 

 

OrderService.java

생성은 우리가 Order 엔티티에 만들어둔 생성메서드 만을 사용한다.

 

JPA는 기본생성자를 protected 까지 허용해둠.

 

 

OrderItem.java

롬복으로 줄이기 가능.

 

 

 

 

 

OrderService.java

order의 생성메서드도 쓴다. ( 이 때도 생성메서드로만 생성할 수 있게 하기 위해 protected 기본 생성자를 만들자. )

 

 

 

 

# 이렇게 해두면 장점

예를들어 다른 개발자가 new Order(); 했는데 빨간 줄 생겨서 Order클래스 가보니까 기본생성자가 PROTECTED라고 되어있으면 아 여긴 생성메서드가 있구나~ 이거써야겠다.~

 

이런 식으로 코드는 항상 제약적으로 짜야한다.

 

 

 

 

======================================= 주문 취소

 

cancel 누를 때 id 값만 넘어옴. 

 

# 캔슬 과정

 

OrderController.java
OrderService.java
Order.java
OrderItem.java

 

원래 엔티티 안의 값이 바뀌면 UPDATE 쿼리를 직접 짜서 리포지토리에 올려야함.

=> JPA를 쓸 때 : 엔티티 안에 있는 데이터들을 바꾸면 JPA가 알아서 변경내역 찾아서(dirtychecking해서 ) DB에 UPDATE 쿼리가 날아감.

 

Item.java

여기선 stockQuantity 값이 바뀌었으므로 Item 에도 UPDATE 쿼리가 날아간다. 

 

 

정말 중요하다.

orm 쓸 때는 도메인 모델 패턴을 많이 씀 .( 유지보수 좋은 거 써라 )

 

Recent Posts
Popular Posts
Recent Comments