[자바 ORM 표준 JPA 프로그래밍 - 기본편] 실전 예제 2 - 연관관계 매핑 시작

이재표·2023년 9월 23일
0

테이블 구조

Member는 Order를 여러개 할수 있고, Order와 Item은 다대다 관계이며 Order_Item이라는 중간테이블을 만들어 사용하는 관계

객체 구조로 변경

일대다, 다대다 등 연관관계가 정리되어있는데, 연관관계에서 우선 중요한것은 단방향 연결을 하는 것이다.

Member

@Entity
public class Member {
    @Id
    @GeneratedValue
    @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<>();
}

Order와 일대다 관계이므로 @OneToMany를 이용한다.
하지만 실무에서는 Order와 양방향 매핑을 하지 않는게 올바르다. 주문정보같은 경우 Member에서 Order를 참조하여 이용하는것보다는 Order의 Member id를 이용하여 해당하는 Order를 join하고 사용하는것이 합리적인 방식이기 때문이다.

Order

@Entity
@Table(name = "ORDERS")
public class Order {
    @Id @GeneratedValue
    @Column(name = "ORDER_ID")
    private Long id;

    /*@Column(name = "MEMBER_ID")
    private Long memberId;*/

    @ManyToOne
    @JoinColumn(name = "MEMBER_ID")
    private Member member;

    @OneToMany(mappedBy = "order")
    private List<OrderItem> orderItems = new ArrayList<>();
    private LocalDateTime orderDate;
    @Enumerated(EnumType.STRING)
    private OrderStatus status;

    public void addOrderItem(OrderItem orderItem) {
        orderItems.add(orderItem);
        orderItem.setOrder(this);
    }
}

OrderItem

@Entity
public class OrderItem {
    @Id @GeneratedValue
    @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;
}

OrderItem의 경우 주문정보를 알기위해 필수적으로 필요하다. 왜냐하면 Item과 Order를 함께 알아야하는 주문정보같은 경우 비즈니스적으로 테이블을 만드는것이 매우 편리하기 때문이다.

Item

@Entity
public class Item {
    @Id @GeneratedValue
    @Column(name = "ITEM_ID")
    private Long id;

    private String name;
    private int price;
    private int stockQuantity;
}

0개의 댓글