코드 그라데이션
실습 3 - 다양한 연관관계 매핑 본문
배송, 카테고리 추가 - 엔티티
배송, 카테고리 추가 - 엔티티
배송 카테고리 추가 - 엔티티 상세내용
코드변경
새로생긴
Category
@Entity
@NoArgsConstructor
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<>();
}
Category와 연관관계 매핑한
Item
// 여기도 양방향 만들어주려면
@ManyToMany(mappedBy = "items")
private List<Category> categories = new ArrayList<>();
이 코드 필드에 추가
새로생긴
Delivery
@Entity
@NoArgsConstructor
public class Delivery {
@Id
@GeneratedValue
private Long id;
private String city;
private String street;
private String zipcode;
private DeliveryStatus status;
// 양방향으로 Order하고 하고 싶으면
@OneToOne(mappedBy = "delivery")
private Order order;
}
아직은 껍데기인 Enum DeliveryStatus도 생성
Delivery와 연관관계 맺을 Order에 필드추가
Order
@OneToOne
@JoinColumn(name = "DELIVERY_ID")
private Delivery delivery;
실행해서
중요한 것만 보면
Hibernate:
create table Category (
id bigint not null,
name varchar(255),
PARENT_ID bigint,
primary key (id)
)
Hibernate:
create table CATEGORY_ITEM (
CATEGORY_ID bigint not null,
ITEM_ID bigint not null
)
Hibernate:
create table Delivery (
id bigint not null,
city varchar(255),
status integer,
street varchar(255),
zipcode varchar(255),
primary key (id)
)
Hibernate:
create table ORDERS (
ORDER_ID bigint not null,
orderDate timestamp,
status varchar(255),
DELIVERY_ID bigint,
MEMBER_ID bigint,
primary key (ORDER_ID)
)
현재까지 있는 코드들 정리해서 전체 보기
Category
@Entity
@NoArgsConstructor
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
@NoArgsConstructor
public class Delivery {
@Id
@GeneratedValue
private Long id;
private String city;
private String street;
private String zipcode;
private DeliveryStatus status;
// 양방향으로 Order하고 하고 싶으면
@OneToOne(mappedBy = "delivery")
private Order order;
}
DeliveryStatus
아직 껍데기
public enum DeliveryStatus {
PENDING, // 주문이나 배송 요청이 접수되었지만 아직 처리 중인 상태.
CONFIRMED, // 주문 또는 배송 요청이 확인되었으며 처리가 시작되었지만 아직 완료되지 않은 상태.
INTRANSIT, // 상품이 배송 중인 상태.
DELIVERD,// 상품이 성공적으로 배달되어 완료된 상태.
CANCELED // 주문이나 배송 요청이 취소된 상태.
}
Item
@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
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@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<>();
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
@Entity
@Table(name = "ORDERS")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ORDER_ID")
private Long id;
@ManyToOne
@JoinColumn(name = "MEMBER_ID")
private Member member; // 이렇게 바꿔준다.
@OneToOne
@JoinColumn(name = "DELIVERY_ID")
private Delivery delivery;
@OneToMany(mappedBy = "order")
private List<OrderItem> orderItems = new ArrayList<>();
private LocalDateTime orderDate;
@Enumerated(EnumType.STRING)
private OrderStatus status;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Member getMember() {
return member;
}
public void setMember(Member member) {
this.member = member;
}
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;
}
public void addOrderItem(OrderItem orderItem) {
orderItems.add(orderItem);
orderItem.setOrder(this);
}
}
OrderItem
@Entity
public class OrderItem {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@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;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
public Item getItem() {
return item;
}
public void setItem(Item item) {
this.item = item;
}
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;
}
}
OrderStatus
public enum OrderStatus {
ORDER, CANCEL
}
'Spring > JPA 공부' 카테고리의 다른 글
@MappedSuperclass (0) | 2023.08.23 |
---|---|
상속관계 매핑 (0) | 2023.08.23 |
다대다 [N : N] (0) | 2023.08.21 |
일대일 [1 : 1] (0) | 2023.08.21 |
일대다 [1 : N] (0) | 2023.08.20 |