연관관계 매핑의 객체 구조는 이렇다.
MEMBER와 ORDER와의 관계에서는 MEMBER_ID만(FK) 잘 매핑해주면 된다.
연관관계 매핑을 해주자.
@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;
private LocalDateTime orderDate;
@Enumerated(EnumType.STRING)
private OrderStatus status;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Member getMember() {
return member;
}
public void setMember(Member member) {
this.member = member;
}
OrderItem도 작성해주자.
package jpabook.jpashop.domain;
import javax.persistence.*;
@Entity
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;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
public Item getItem() {
return item;
}
public void setItem(Item item) {
this.item = item;
}
public int getOrderPrice() {
return orderPrice;
}
public void setOrderPrice(int orderPrice) {
this.orderPrice = orderPrice;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
member class에 mappedby를 해주자.
@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에 orderItem과의 관계도 넣어주자.
@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<>();
주문을 만드는 예시 코드를 만들어 보면 JpaMain에서는 아래와 같이 해주고
try {
Order order = new Order();
order.addOrderItem(new OrderItem());
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
emf.close();
Order class에서는 아래와 같이 해준다.
// 양방향 연관관계가 걸리도록 한다.
public void addOrderItem(OrderItem orderItem) {
orderItems.add(orderItem);
orderItem.setOrder(this);
}
양방향 연관관계가 아니여도 어플리케이션 개발할 때 문제가 되지 않는다.
try {
Order order = new Order();
OrderItem orderItem = new OrderItem();
orderItem.setOrder(order);
em.persist(orderItem);
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
emf.close();
}
<출처 김영한: 자바 ORM 표준 JPA 프로그래밍 - 기본편 >
https://www.inflearn.com/course/ORM-JPA-Basic/dashboard
'Spring > JPA' 카테고리의 다른 글
일대일 1:1 / 다대다 N:M (0) | 2022.05.25 |
---|---|
다대일 N:1 / 일대다 1:N (0) | 2022.05.25 |
양방향 연관관계와 연관관계의 주인 (0) | 2022.05.08 |
연관관계 매핑 기초 - 단방향 연관관계 (0) | 2022.04.16 |
실전 예제 1 - 요구사항 분석과 기본 매핑 (0) | 2022.04.14 |