Spring Projcect/[갠플] Online-mall

[8일차] Order 엔티티 매핑

계란💕 2022. 10. 3. 01:19

 

1. 주문 ORDERS

  • Orders - Member : 다대일 관계
    • 데이터베이스의 키워드로 order가 있으니까 구분하기 위해 orders를 넣는다 
    • order 테이블에 여러 개의 order가 모두 보여야한다.
    • 컬렉션이라서 중간 테이블이 생성된다.
@OneToMany
private List<Order> orderList = new ArrayList<>();

 

@ManyToOne(cascade = CascadeType.ALL)    // order, member 중에서 order를 연관관계의 주인으로 만들려면?
private Member member;

 

  • OrderDetail -  Product : 일대다 관계 
    • 컬렉션이라서 중간 테이블이 생성된다.
    • Datail 테이블에서는 상품 정보가 필요하지만 상품 테이블에서는 주문 상세 정보가 필요없다.
@ManyToOne      // Product 테이블에는 orderDetail 필드가 필요없다.(?)
private Product product;    // 상품명

 

 

  Ex) 주문 test

  • Test
java
열기

 

  Note) 실행 결과

 

  • Member
    • 멤버 안에는 List<Order> orderList 가 멤버로 있다 .
    • 컬렉션 형태이기 때문에 멤버 테이블에는 null이고 중간테이블인 "member_order_list"라는 테이블이 새로 생성된다. 

MEMBER
MEMBER&nbsp;테이블의 order_id는 비어있다. (컬렉션이기 떄문이다.)

 

  • Order
    •  57번 회원이 7번 주문

 

  • OrdersOrderDetailList
    • 7번 Order에 1번 OrderDetail, 2번 OrderDetail이 있다. 두 개의 상품을 주문
    •  Order 엔티티에 List<OrderDatail> 컬렉션을 넣었다.
    • 따라서, 중간 테이블인 Orders_ordere_detail_list 이라는 새로운 테이블이 생성된다.

  • OrderDetail
    • 위에  있는 7번 주문의 디테일 1번, 2번에 대한 상품의 주문 정보와 상품 번호를 조회 가능하다.

 

  • MemberOrderList
    • 아무 데이터도 들어가지 않는다.

 

 

현재 ERD

 

 

 

  오류)

java
열기
  • 오류: AuthenticationFailedException
  • 원인: yml 파일에 이메일 주소를 잘못 적어서 생긴 오류, 그리고 yml 파일은 들여쓰기도 조심해야한다.

 

 

 

 

점검사항

  • 수령인 상세 정보는 상세 정보가 아닌 주문 정보에 넣는다.
  • 주문 테이블의  PK는 order_id 보다 id로 하는게 나을 것 같다.
  • 주문에 결제 관련 정보, 쿠폰 정보를 넣어야한다.
  • 지금까지 양방향으로 매핑했는데 단방향 매핑도 고려해봐야겠다.