BE전문가 프로젝트

쇼핑몰 만들기 2 - 다양한 연관 관계 매핑 본문

JPA

쇼핑몰 만들기 2 - 다양한 연관 관계 매핑

원호보고서 2022. 10. 27. 22:38

배송, 카테고리 추가 - 엔티티

  • 주문과 배송은 1:1(@OneToMany)
  • 상품과 카테고리는 N:M(@ManyToMany)

 

배송, 카테고리 추가 - ERD

 

 

주문과 배송 1:1관계 

Order가 연관관계의 주인인 관계

@Entity
@Table(name = "ORDERS") //ORDERS는 ORDER BY라는 명령어가 있기 떄문에 S를 붙여준다
public class Order {

    @Id
    @GeneratedValue
    @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 orderDateTime;

    @Enumerated(EnumType.STRING)
    private OrderStatus status;
 }
@Entity
public class Delivery {

    @Id
    @GeneratedValue
    @Column(name = "DELIVERY_ID")
    private Long id;

    private String city;

    private String street;

    private String zipcode;

    private DeliveryStatus status;

    @OneToOne(mappedBy = "delivery")
    private Order order;
}

 

상품과 카테고리 N:M관계

카테고리가 연관관계의 주인인 관계

@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;

    @ManyToMany
    @JoinTable(name="CATEGORY_ITEM"
            , joinColumns =  @JoinColumn(name="CATEGORY_ID")
            , inverseJoinColumns =  @JoinColumn(name = "ITEM_ID"))
    private List<Item> items = new ArrayList<>();
}
@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<>();
 }

N:M관계

  • 테이블의 N:M 관계는 중간 테이블을 이용해서 1:N, N:1
  • 실전에서는 중간 테이블이 단순하지 않다
  • @ManyToMany는 제약: 필드 추가X, 엔티티 테이블 불일치
  • 실전에서는 @ManyToMany 사용 하지 않는다

'JPA' 카테고리의 다른 글

상속관계 매핑  (0) 2022.10.29
연관관계 Annotation 정리  (0) 2022.10.27
일대일(1:1)  (0) 2022.10.23
일대다(1:N)  (0) 2022.10.20
다대일(N:1)  (0) 2022.10.18
Comments