[개발] 연관 관계 매핑 : N대1, 1대N 양방향 매핑
필기자
2022-11-07 16:33
5,608
0
본문
member와 orders와의 관계 1:N
연관 관계에서 주인은 orders : orders가 FK를 가짐
kr/hull/shop/config/OrderStatus.java
public enum OrderStatus {
ORDER, CANCEL
}
kr/hull/shop/entity/Order.java
@Entity
@Table(name = "orders") // sql 예약어 중 order 존재하여 orders로 테이블명 변경
@Getter
@Setter
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 orderStatus; //주문상태
private LocalDateTime regTime;
private LocalDateTime updateTime;
}
orders와 order_item와의 관계 1:N
연관 관계에서 주인은 order_item : order_item가 FK를 가짐
kr/hull/shop/entity/OrderItem.java
@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; //수량
private LocalDateTime regTime;
private LocalDateTime updateTime;
}
ORDERS와 ORDER_ITEM 테이블을 ORDER_ID를 외래키로 조인하면 주문에 속한 상품이 어떤상품들이 있는지 알 수 있고, 주문 상품은 어떤 주문에 속하는지를 알 수 있음
즉, 테이블은 외래키 하나로 양방향 조회가 가능. 하지만 엔티티를 양방향 연관 관계로 설정하면 객체의 참조는 둘인데 외래키는 하나이므로 둘 중 누가 외래키를 관리할지를 정해야함.
- 연관 관계의 주인은 외래키가 있는 곳으로 설정
- 연관 관계의 주인이 외래키를 관리(등록, 수정, 삭제)
- 주인이 아닌 쪽은 연관 관계 매핑 시 mappedBy 속성의 값으로 연관 관계의 주인을 설정
- 주인이 아닌 쪽은 읽기만 가능
양방향 연관 관계 추가
kr/hull/shop/entity/Order.java
@Entity
@Table(name = "orders") // sql 예약어 중 order 존재하여 orders로 테이블명 변경
@Getter
@Setter
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 orderStatus; //주문상태
@OneToMany(mappedBy = "order")
private List<OrderItem> orderItems = new ArrayList<>();
private LocalDateTime regTime;
private LocalDateTime updateTime;
}
양방향 매핑은 사용자 편의성을 위해 제공되는 기능임
단방향 매핑으로 설계 후 시스템 사용자를 위한 확장 기능을 제공할 때 추가하는 형태
댓글목록0