실전 예제로 요구사항 분석과 기본 엔티티 매핑을 해보았다.
기본 엔티티 매핑을 위한 도메인 모델
- 회원은 여러번 주문할 수 있다. -> 일 대 다
- 주문할때 여러 상품을 선택할 수 있다. -> 일 대 다
- 같은 상품이 여러번 주문될 수 있다. -> 다 대 일
테이블 설계
엔티티 설계
엔티티 클래스 코드
Member
package jpabook.jpashop.domain;
import javax.persistence.*;
@Entity
@Table()
public class Member {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
private String name;
private String city;
private String street;
private String zipcode;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
}
Order
package jpabook.jpashop.domain;
import javax.persistence.*;
import java.time.LocalDateTime;
@Entity
@Table(name = "ORDERS")
public class Order {
@Id @GeneratedValue
@Column(name = "ORDER_ID")
private Long id;
@Column(name = "MEMBER_ID")
private Long memberId;
private Member member;
public Member getMember() {
return member;
}
private LocalDateTime orderDate;
@Enumerated(EnumType.STRING)
private OrderStatus status;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getMemberId() {
return memberId;
}
public void setMemberId(Long memberId) {
this.memberId = memberId;
}
public LocalDateTime getOrderDate() {
return orderDate;
}
public void setOrderDate(LocalDateTime orderDate) {
this.orderDate = orderDate;
}
public OrderStatus getStatus() {
return status;
}
public void setStatus(OrderStatus status) {
this.status = status;
}
}
order class 에서 private Member member; 가 들어가 있다.
아직 연관관계 매핑을 배우지 않은 상태에서 최대한 객체지향적으로 접근하기 위함이다.
private Member member; 를 선언해놓지 않고 Main 메소드에서 "주문한 사람의 이름"을 구하기 위해서는
Order order = em.find(Order.class, 1L);
Long memberId = order.getMemberId();
Member member = em.find(Member.class, memberId);
이렇게 불러와야 한다.
하지만 Order class 내에 private Member member; 를 선언해 놓으면
Member findMember = order.getMember();
이 코드 한줄이면 찾을 수 있다.
Item
package jpabook.jpashop.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Item {
@Id @GeneratedValue
@Column(name = "ITEM_ID")
private Long id;
private String name;
private int price;
private int stockQuantity;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public int getStockQuantity() {
return stockQuantity;
}
public void setStockQuantity(int stockQuantity) {
this.stockQuantity = stockQuantity;
}
}
OrderItem
package jpabook.jpashop.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class OrderItem {
@Id
@GeneratedValue
@Column(name = "ORDER_ITEM_ID")
private Long id;
@Column(name = "ORDER_ID")
private Long ordeId;
@Column(name = "ITEM_ID")
private Long itemId;
private int orderPrice;
private int count;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getOrdeId() {
return ordeId;
}
public void setOrdeId(Long ordeId) {
this.ordeId = ordeId;
}
public Long getItemId() {
return itemId;
}
public void setItemId(Long itemId) {
this.itemId = itemId;
}
public int getOrderPrice() {
return orderPrice;
}
public void setOrderPrice(int orderPrice) {
this.orderPrice = orderPrice;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
'Web > JPA' 카테고리의 다른 글
EP6. 연관관계 매핑 (실전예제) (0) | 2021.02.06 |
---|---|
EP5. 연관관계 매핑 (0) | 2021.02.05 |
EP3. 영속성 컨텍스트, 엔티티 매핑 (0) | 2021.02.03 |
EP2. JPA 기본동작과정과 내부동작방식 (0) | 2021.02.03 |
EP1. JPA 개념과 개발환경 세팅 (0) | 2021.02.02 |