주문 할 떄 주문회원, 상품명, 주문수량 넘어오는데 이 떄 주문 회원, 상품명은 각각의 Id로 넘어온다.
그걸 여기서 받는다.
# OrderService.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에 날라간다.
생성은 우리가 Order 엔티티에 만들어둔 생성메서드 만을 사용한다.
JPA는 기본생성자를 protected 까지 허용해둠.
롬복으로 줄이기 가능.
order의 생성메서드도 쓴다. ( 이 때도 생성메서드로만 생성할 수 있게 하기 위해 protected 기본 생성자를 만들자. )
# 이렇게 해두면 장점
예를들어 다른 개발자가 new Order(); 했는데 빨간 줄 생겨서 Order클래스 가보니까 기본생성자가 PROTECTED라고 되어있으면 아 여긴 생성메서드가 있구나~ 이거써야겠다.~
이런 식으로 코드는 항상 제약적으로 짜야한다.
======================================= 주문 취소
cancel 누를 때 id 값만 넘어옴.
# 캔슬 과정
원래 엔티티 안의 값이 바뀌면 UPDATE 쿼리를 직접 짜서 리포지토리에 올려야함.
=> JPA를 쓸 때 : 엔티티 안에 있는 데이터들을 바꾸면 JPA가 알아서 변경내역 찾아서(dirtychecking해서 ) DB에 UPDATE 쿼리가 날아감.
여기선 stockQuantity 값이 바뀌었으므로 Item 에도 UPDATE 쿼리가 날아간다.
정말 중요하다.
orm 쓸 때는 도메인 모델 패턴을 많이 씀 .( 유지보수 좋은 거 써라 )
'Java, Spring > 스프링부트와 JPA 활용 1' 카테고리의 다른 글
6-5. 주문 검색 기능 개발 (0) | 2022.08.13 |
---|---|
6-4. 주문 기능 테스트 (0) | 2022.08.13 |
6-1. 주문, 주문상품 엔티티 개발 (0) | 2022.08.13 |
5. 상품 도메인 개발 (0) | 2022.08.12 |
4-3. 회원 기능 테스트 (0) | 2022.08.12 |