본문으로 바로가기

실습 - 연관관계 매핑 시작

category Spring/Spring JPA 2024. 3. 16. 17:52
  • 예제 1이랑 테이블 구조 동일함
  • 참조를 사용하도록 변경함


  • Member Orders 테이블의 관계
    • Member (1) Orders(N) 의 관계
    • 멤버 하나에 주문 여러개 가능 

Order.java

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

    // 예제 2 (s)
    @ManyToOne
    @JoinColumn(name = "MEMBER_ID")
    private Member member;
    // 예제 2 (e)

    private LocalDateTime orderDate;
    @Enumerated(EnumType.STRING)
    private OrderStatus status;
}
  • Order table 입장에선 Member 는 ManyToOne 관계이다 

 

Member.java

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<>();

}
  • Member table 입장에선 Order는 OneToMany 관계이다.
  • mappedBy 로 Order table의 어떤 컬럼과 매핑 시킬건지 써놓는다.
  • 이 경우엔 Order table의 mamber 와 매핑 시킬거기때문에 orders에 @OneToMany(mappedBy = "member") 어노테이션을 추가해준다. (양방향 연관관계)
  • 근데 이 경우엔 예제이기 때문에 추가했지만 Order로 시작해 member 를 찾을 수 있으므로 굳이 orders를 추가 안해줘도 될거같다고 함!

 


  • Orders table 과 OrderItem table의 관계
    • Orders(1) OrderItem(N)
    • 주문 하나에 주문한 상품이 여러개 일 수 있다.
  • OrderItem 와 Item 의 관계
    • OrderItem(N) Item(1)
    • 아이템이 여러 주문 내역에 포함될 수 있다.

 

OrderItem.java

public class OrderItem {
    @Id @GeneratedValue
    @Column(name = "ORDER_ITEM_ID")
    private Long id;

//    @Column(name = "ORDER_ID")
//    private Long orderId;

    @ManyToOne
    @JoinColumn(name = "ORDER_ID")
    private Order order;

//    @Column(name = "ITEM_ID")
//    private Long itemId;

    @ManyToOne
    @JoinColumn(name="ITEM_ID")
    private Item item;

    private int orderPrice;

    private int count;
}

 

 

Order.java

아래 컬럼 추가

@OneToMany(mappedBy = "order")
private List<OrderItem> orderItems = new ArrayList<>();
  • 이 클래스에도 양방향 연관관계 추가해줌
  • Order에 OrderItems는 유의미한 컬럼이 될 수 있음(근데 없어도됨)
  • Order table 입장에선 OrderItem 은 OneToMany 관계이다.
  • OrderItem의 order 컬럼과 매핑할거기때문에 mappedBy="order" 해준다.
 

'Spring > Spring JPA' 카테고리의 다른 글

다양한 연관관계 매핑 : 일대다 [1:N]  (0) 2024.03.18
다양한 연관관계 매핑  (0) 2024.03.16
연관관계 매핑 기초  (0) 2024.01.28
엔티티 매핑  (0) 2024.01.01
영속성 관리  (0) 2023.12.31