위 구조를 만들어 보자
@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;
// ...
}
@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;
// ...
}
@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을 가져오자. 이 경우는 비즈니스적으로 의미있다.
연관관계를 맵핑할 때 양방향이 아니어도 풀 수 있다. 양방향은 정말 필요할 때 사용하자.
그런데 실전에서 JPQL을 많이 사용하는데 Order를 할때 OrderItems를 조인해서 끌어 오고 싶어서 양방향을 많이 걸게된다.
핵심은 단 방향을 잘 설계하는 것이 중요하다.