작성
·
411
·
수정됨
0
<Order 클래스>
package jpabook.jpashop.domain;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name = "orders")
@Getter @Setter
public class Order {
@Id @GeneratedValue
@Column(name = "order_id") // PK
private Long id;
@ManyToOne // 주문의 입장에서는 다대일 관계
@JoinColumn(name = "member_id") // FK
private Member member;
@OneToMany
private List<OrderItem> orderItems = new ArrayList<>();
@OneToOne
//todo 일대일관계에서는 FK를 아무대나 매핑해도 상관없는데, 주로 엑세스를 많이 하는 엔터티에 사용한다고 함
@JoinColumn(name = "delivery_id")
private Delivery delivery;
private LocalDateTime orderDate; // 주문시간(hibernate가 알아서 매핑해줌)
@Enumerated(EnumType.STRING)
private OrderStatus status;
}
<Item 클래스>
package jpabook.jpashop.domain.item;
import jpabook.jpashop.domain.Category;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) // 한 테이블에 다 떄려박음
@DiscriminatorColumn(name = "dtype")
@Getter @Setter
public abstract 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<>();
}
<OrderItem 클래스>
package jpabook.jpashop.domain;
import jpabook.jpashop.domain.item.Item;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
@Entity
@Getter @Setter
public class OrderItem {
@Id @GeneratedValue
@Column(name = "order_item_id")
private Long id;
@ManyToOne
@JoinColumn(name = "item_id")
private Item item;
@ManyToOne
@JoinColumn(name = "order_id")
private Order order;
private int orderPrice; // 주문 가격
private int count; // 주문 수량
}
참고로, 다른 엔터티 테이블의 속성들은 설계에 있는 그대로 정상적으로 잘 만들어졌습니다.
답변 2
0
@OneToMany
private List<OrderItem> orderItems = new ArrayList<>();
이 부분에 (mappedBy = "order") 를 추가해서 테스트 해보세요
@OneToMany (mappedBy = "order")
private List<OrderItem> orderItems = new ArrayList<>();
아니요, 다만 Item과 Category 엔터티를 @ManytoMany로 매핑하였습니다. 그런데 Order와 OrderItem 엔터티는 @OneToMany 또는 @ManyToOne로 매핑하였는데 왜 이런 현상이 발생한거죠??