Member는 Order를 여러개 할수 있고, Order와 Item은 다대다 관계이며 Order_Item이라는 중간테이블을 만들어 사용하는 관계
일대다, 다대다 등 연관관계가 정리되어있는데, 연관관계에서 우선 중요한것은 단방향 연결을 하는 것이다.
Member
@Entity
public class Member {
@Id
@GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
private String name;
private String city;
private String street;
private String zipcode;
@OneToMany(mappedBy = "member")
private List<Order> orders = new ArrayList<>();
}
Order와 일대다 관계이므로 @OneToMany를 이용한다.
하지만 실무에서는 Order와 양방향 매핑을 하지 않는게 올바르다. 주문정보같은 경우 Member에서 Order를 참조하여 이용하는것보다는 Order의 Member id를 이용하여 해당하는 Order를 join하고 사용하는것이 합리적인 방식이기 때문이다.
Order
@Entity
@Table(name = "ORDERS")
public class Order {
@Id @GeneratedValue
@Column(name = "ORDER_ID")
private Long id;
/*@Column(name = "MEMBER_ID")
private Long memberId;*/
@ManyToOne
@JoinColumn(name = "MEMBER_ID")
private Member member;
@OneToMany(mappedBy = "order")
private List<OrderItem> orderItems = new ArrayList<>();
private LocalDateTime orderDate;
@Enumerated(EnumType.STRING)
private OrderStatus status;
public void addOrderItem(OrderItem orderItem) {
orderItems.add(orderItem);
orderItem.setOrder(this);
}
}
OrderItem
@Entity
public class OrderItem {
@Id @GeneratedValue
@Column(name = "ORDER_ITEM_ID")
private Long id;
@ManyToOne
@JoinColumn(name = "ORDER_ID")
private Order order;
@ManyToOne
@JoinColumn(name = "ITEM_ID")
private Item item;
private int orderPrice;
private int count;
}
OrderItem의 경우 주문정보를 알기위해 필수적으로 필요하다. 왜냐하면 Item과 Order를 함께 알아야하는 주문정보같은 경우 비즈니스적으로 테이블을 만드는것이 매우 편리하기 때문이다.
Item
@Entity
public class Item {
@Id @GeneratedValue
@Column(name = "ITEM_ID")
private Long id;
private String name;
private int price;
private int stockQuantity;
}