🔙뒤로가기
엔티티에 배송, 카테고리 추가
- 주문과 배송은 1:1 (@OneToOne)
- 상품과 카테고리는 N:M (@ManyToMany)

Delivery, Category 엔티티 추가 - ERD

Delivery, Category 엔티티 상세

N:M 관계는 1:N, N:1로 풀어내기
- 테이블의 N:M관계는 중간 테이블을 이용해서 1:N, N:1로 풀어내자
- 실전에서는 중간 테이블이 이렇게 단순하게 생기지는 않음
- @ManyToMany는 제약 : 필드 추가 X, 엔티티 테이블 불일치, 실전 사용 X
Category Entity
package practice;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
public class Category {
@Id
@GeneratedValue
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = "PARENT_ID")
private Category parent;
@OneToMany(mappedBy = "parent")
private List<Category> child = new ArrayList<>();
@ManyToMany
@JoinTable(name = "CATEGORY_ITEM",
joinColumns = @JoinColumn(name = "CATEGORY_ID"),
inverseJoinColumns = @JoinColumn(name = "ITEM_ID")
)
private List<Item> items = new ArrayList<>();
}
Delivery Entity
package practice;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
@Entity
public class Delivery {
@Id @GeneratedValue
private Long id;
private String city;
private String street;
private String zipcode;
private DeliveryStatus status;
@OneToOne(mappedBy = "delivery")
private Order order;
}
// DeliveryStatus 엔티티는 생략
Item Entity
package practice;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
public class Item {
@Id @GeneratedValue
@Column(name = "ITEM_ID")
private Long id;
private String name;
private int price;
private int stockQuantity;
@ManyToMany(mappedBy = "items")
private List<Category> categories = new ArrayList<>();
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;
}
}
Member Entity