728x90
반응형
이전 실습에 배송, 카테고리 관계를 추가해보자.
엔티티 구성
- 주문과 배송은
1:1
(@OneToOne
) - 상품과 카테고리는
N:M
(@ManyToMany
)

테이블 및 엔티티 설계


실습
주문 - 배송
소스
- Order.java
@Entity @Table(name = "ORDERS") public class Order { @Id @GeneratedValue @Column(name = "ORDER_ID") private Long id; @ManyToOne @JoinColumn(name = "MEMBER_ID") private Member member; private LocalDateTime orderDate; @Enumerated(EnumType.STRING) private OrderStatus status; // 일대일 양방향 (Order <-> Delivery) @OneToOne @JoinColumn(name = "DELIVERY_ID") private Delivery delivery; @OneToMany(mappedBy = "order") private List<OrderItem> orderItems = new ArrayList<>(); public void addOrderItem(OrderItem orderItem) { orderItems.add(orderItem); orderItem.setOrder(this); } // getter, setter }
- Delivery.java
@Entity public class Delivery { @Id @GeneratedValue private Long id; private String city; private String street; private String zipcode; private DeliveryStatus status; // 일대일 양방향 (Order <-> Delivery) @OneToOne(mappedBy = "delivery") private Order order; // getter, setter }
- DeliveryStatus.java
public enum DeliveryStatus {}
동작 결과


상품 - 카테고리
소스
- Item.java
@Entity public class Item { @Id @GeneratedValue @Column(name = "ITEM_ID") private Long id; private String name; private int price; private int stockQuantity; // 다대다 양방향 (Category <-> Item) @ManyToMany(mappedBy = "items") private List<Category> categories = new ArrayList<>(); // getter, setter }
- Category.java
@Entity public class Category { @Id @GeneratedValue private Long id; private String name; // 부모-자식 관계 // 양방향으로 구성 (parent <-> child) // parent @ManyToOne @JoinColumn(name = "PARENT_ID") private Category parent; // child @OneToMany(mappedBy = "parent") private List<Category> child = new ArrayList<>(); // 다대다 (Item <-> Category) @ManyToMany @JoinTable(name = "CATEGORY_ITEM", joinColumns = @JoinColumn(name = "CATEGORY_ID"), inverseJoinColumns = @JoinColumn(name = "ITEM_ID") ) private List<Item> items = new ArrayList<>(); }
동작 결과


N:M 관계는 1:N, N:1로 변경
- 테이블의
N:M
관계는 중간 테이블을 이용해서1:N
,N:1
관계로 변경 - 실전에서는 중간 테이블이 단순하지 않다. (= 연결정보만 있는 것이 아니다.)
@ManyToMany
는 필드 추가 불가능하고 엔티티 테이블 불일치한다는 제약이 있다.- 실무에서는
@ManyToMany
사용하지 않는다.
728x90
반응형
'Dev > JPA' 카테고리의 다른 글
[JPA] 실습 - 상속관계 매핑 (0) | 2021.08.25 |
---|---|
[JPA] 고급 매핑 (0) | 2021.08.24 |
[JPA] 다양한 연관관계 매핑 (0) | 2021.08.23 |
[JPA] 실습 - 연관관계 매핑 시작 (0) | 2021.08.18 |
[JPA] 연관관계 매핑 기초 (0) | 2021.08.12 |
댓글