요구사항 분석
![](https://blog.kakaocdn.net/dn/cgl1Gq/btsjRk54l5U/36HyAiMeWEBsQikKkB2Re0/img.png)
- 회원은 상품을 주문할 수 있다.
- 주문 시 여러 종류의 상품을 선택할 수 있다.
도메인 모델 분석
![](https://blog.kakaocdn.net/dn/s90Rl/btsjPLwl57V/BqRfgWIBMZAEVAUkvJdYp0/img.png)
- 회원과 주문의 관계: 회원은 여러 번 주문할 수 있다(일대다)
- 주문과 상품의 관계: 주문을할 때 여러 상품을 선택할 수 있다. 반대로 같은 상품도 여러 번 주문될 수 있다. 주문상품이라는 모델을만들어서 다대다 관계를 일대다, 다대일 관계로 물어냈다.
테이블 설계
![](https://blog.kakaocdn.net/dn/qY7D2/btsjRlqogx2/dzQmnbMVNFD1NJmyZEKwj1/img.png)
엔티티 설계와 매핑
![](https://blog.kakaocdn.net/dn/bnZxIw/btsjPpG64Ah/DnAaDY9URe8nNzpBH5Hrv1/img.png)
구현
@Entity
public class Member {
@Id
@GeneratedValue
private Long id;
private String name;
private String city;
private String street;
private String zipcode;
}
@Entity
@Table(name = "ORDERS")
public class Order {
@Id
@GeneratedValue
private Long id;
private Long memberId;
private Date orderDate;
@Enumerated(EnumType.STRING)
private OrderStatus status;
}
@Entity
public class OrderItem {
@Id
@GeneratedValue
private Long id;
private Long orderId;
private Long itemId;
private int orderPrice;
private int count;
}
@Entity
public class Item {
@Id
@GeneratedValue
private Long id;
private String name;
private int price;
private int stockQuantity;
}
public enum OrderStatus {
ORDER, CANCEL
}
문제점
- 관계형 DB에 맞춘 설계 방식이다.
- 이렇게 FK를 그냥 상대 클래스의 ID로 하면 객체적인 설계가 아니다.
- 객체 그래프 탐색이 불가능하다…
- 따라서, 테이블 연관관계 매핑이 필요하다.
Uploaded by N2T
(23.06.11 16:47)에 작성된 글 입니다.