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
<hide/>
Product product1 = productRepository.findById(1L).get();
Product product2 = productRepository.findById(2L).get();
List<OrderDetail> orderDetailList = new ArrayList<>();
OrderDetail orderDetail1 = OrderDetail.builder()
.product(product1)
.quantity(13)
.recipientName("우영우")
.recipientPhone("0109993333")
.recipientAddr("서울시")
.recipientAddrDetail("마포구")
.recipientZipcode("2090-333")
.build();
OrderDetail orderDetail2 = OrderDetail.builder()
.product(product2)
.quantity(50)
.recipientName("김고은")
.recipientPhone("0101029382")
.recipientAddr("경기도")
.recipientAddrDetail("안양시")
.recipientZipcode("209-333")
.build();
orderDetailList.add(orderDetail1);
orderDetailList.add(orderDetail2);
Order order = Order.builder()
.member(member)
.orderDate(LocalDateTime.now())
.orderDetailList(orderDetailList)
.build();
orderDetailRepository.save(orderDetail1);
orderDetailRepository.save(orderDetail2);
orderRepository.save(order);
memberRepository.save(member);
Note) 실행 결과
- Member
- 멤버 안에는 List<Order> orderList 가 멤버로 있다 .
- 컬렉션 형태이기 때문에 멤버 테이블에는 null이고 중간테이블인 "member_order_list"라는 테이블이 새로 생성된다.
- Order
- 57번 회원이 7번 주문
- OrdersOrderDetailList
- 7번 Order에 1번 OrderDetail, 2번 OrderDetail이 있다. 두 개의 상품을 주문
- Order 엔티티에 List<OrderDatail> 컬렉션을 넣었다.
- 따라서, 중간 테이블인 Orders_ordere_detail_list 이라는 새로운 테이블이 생성된다.
- OrderDetail
- 위에 있는 7번 주문의 디테일 1번, 2번에 대한 상품의 주문 정보와 상품 번호를 조회 가능하다.
- MemberOrderList
- 아무 데이터도 들어가지 않는다.
오류)
<hide/>
Hibernate: select member0_.id as id1_3_, member0_.addr as addr2_3_, member0_.addr_detail as addr_det3_3_, member0_.admin_yn as admin_yn4_3_, member0_.cart_id as cart_id20_3_, member0_.email_auth_dt as email_au5_3_, member0_.email_auth_key as email_au6_3_, member0_.email_auth_yn as email_au7_3_, member0_.last_login_time as last_log8_3_, member0_.password as password9_3_, member0_.phone as phone10_3_, member0_.point as point11_3_, member0_.reg_dt as reg_dt12_3_, member0_.reset_password_key as reset_p13_3_, member0_.reset_password_limit_dt as reset_p14_3_, member0_.user_grade as user_gr15_3_, member0_.user_id as user_id16_3_, member0_.user_name as user_na17_3_, member0_.user_status as user_st18_3_, member0_.zipcode as zipcode19_3_ from member member0_ where member0_.user_id=?
Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 535-5.7.8 Username and Password not accepted. Learn more at
535 5.7.8 https://support.google.com/mail/?p=BadCredentials h13-20020a17090a470d00b0020a1f091a0asm4229206pjg.55 - gsmtp
- 오류: AuthenticationFailedException
- 원인: yml 파일에 이메일 주소를 잘못 적어서 생긴 오류, 그리고 yml 파일은 들여쓰기도 조심해야한다.
점검사항
- 수령인 상세 정보는 상세 정보가 아닌 주문 정보에 넣는다.
- 주문 테이블의 PK는 order_id 보다 id로 하는게 나을 것 같다.
- 주문에 결제 관련 정보, 쿠폰 정보를 넣어야한다.
- 지금까지 양방향으로 매핑했는데 단방향 매핑도 고려해봐야겠다.
'Spring Projcect > [갠플] Online-mall' 카테고리의 다른 글
[9일차] 관리자 API - 상품 등록, 수정, 삭제 (1) | 2022.10.04 |
---|---|
[7일차] 관리자 API - 상품 조회 (0) | 2022.09.29 |
[6일차] 관리자 로그인, 상품 등록 (0) | 2022.09.28 |
[5일차] 연관 관계 매핑 - 장바구니, 쿠폰 (0) | 2022.09.27 |
[4일차] 오류 해결, 로그인 히스토리 (0) | 2022.09.24 |