요구사항 분석
-
회원은 상품을 주문할 수 있다.
-
주문 시 여러 종류의 상품을 선택할 수 있다.
기능 목록
- 회원기능
- 회원등록
- 회원조회
- 상품기능
- 상품등록
- 상품수정
- 상품조회
- 주문기능
- 상품주문
- 주문내역조회
- 주문취소
도메인 모델 분석
- 회원과 주문의 관계 (일대다) : 회원은 여러번 주문할 수 있다.
- 주문과 상품의 관계 : 주문할 때 여러 상품을 선택할 수 있다. 반대로 같은 상품도 여러 번 주문될 수 있다. 주문 상품이라는 모델을 만들어 다대다 관계를 일다대, 다대일 관계로 풀어낸다.
테이블설계
엔티티 설계와 매핑
데이터 중심 설계의 문제점
위 엔티티 설계대로 Domain class를 작성하면 Order클래스에 private Long memberId; 로 작성하게 된다.
- 현재 방식은 객체 설계를 테이블 설계에 맞춘 방식이다.
- 테이블의 외래키를 객체에 그대로 가져왔다.
- 객체 그래프 탐색이 불가능하다
- 참조가 없으므로 UML도 잘못되었다.
위에 쓴대로 사용한다면 주문한 회원정보를 찾아야할때 아래 코드로 찾아야한다.
Order order = em.find(Order.class, 101L);
Long memberId = order.getMemberId();
Member member = em.find(Member.class, memberId);
이건 조금 객체지향적이지 않은 방법이고 객체를 관계형DB에 맞춘거라고 할 수 있다.
우리는 Order.class를 작성할 때 private Member member; 로 작성하여 객체로 참조될때 참조된 걸 찾을 수 있게 해야한다. 주문한 회원정보를 찾아야할 때, 아래처럼 사용하는 것이 좋다.
Order order = em.find(Order.class, 101L);
Member member = order.getMember();
member.getId(); //
2. 연관 관계 매핑
객체 구조
4. 상속 관계 매핑
1. 상품은 상속관계매핑을 사용하고, 2번째는 @MappedSuperclass를 사용하면 된다.
ITEM을 싱글테이블로 설계할 것이다.
'Spring > JPA' 카테고리의 다른 글
[JPA] 다양한 연관 관계 매핑 (0) | 2021.03.07 |
---|---|
[JPA] *중요* 양방향 연관관계와 연관관계의 주인 (0) | 2021.03.07 |
[JPA] 연관관계 매핑 - 단방향 연관관계 ( 객체지향적으로 설계하는 방법 ) (0) | 2021.03.06 |
[JPA] 엔티티 매핑 (0) | 2021.03.06 |
[JPA] 영속성 컨텍스트 (0) | 2021.03.06 |
댓글