- 실전예제 1에 이어서 진행
https://github.com/oss0202/jpashop
- 테이블 구조
실전예제1과 테이블 구조는 동일
- 외래키(FK)가 있는 테이블이 연관관계 주인
- 객체 구조
- 참조를 사용하도록 변경
- 단방향 매핑 진행
- 객체 입장에서는 무조건 단방향이 좋다.
- 양방향일 경우 신경쓸 부분이 많아진다.
- Order, OrderItem 수정
- 외래키가 있으므로 연관관계의 주인
// Order.java
// 이전
@Column(name = "MEMBER_ID")
private Long memberId;
// 연관관계 매핑 후
@ManyToOne // 여러 주문을 한 회원은 하나
@JoinColumn(name = "MEMBER_ID")
private Member member;
// OrderItem.java
// 이전
@Column(name = "ORDER_ID")
private Long orderId;
@Column(name = "ITEM_ID")
private Long itemID;
// 연관관계 매핑 후
@ManyToOne // 여러 주문 상품의 주문은 하나
@JoinColumn(name = "ORDER_ID")
private Order order;
@ManyToOne // 여러 상품의 주문 상품은 하나
@JoinColumn(name = "ITEM_ID")
private Item item;
- 양방향 매핑 진행
1. Member
- 실무를 기준으로 보면 굳이 Order Entity와 양방향 매핑을 할 필요가 없다.
- 회원들이 주문한 목록을 조회하고 싶다면 Member.getOrders(회원의 주문 목록)가 아닌 Order.getmember(주문의 회원목록)를 통해서 풀어나가기 떄문이다.
- 그러나 예제이기 때문에 진행해 보겠다.
- Member가 굳이 Order를 알 필요가 없다고 한다.
- 실시간 어플리케이션에서 특정 회원의 주문을 조회하고 싶을 때에 Member에 접근해서 orders를 조회하지 않는다.
- Order에도 member_id(외래키)가 존재하기 때문에 굳이 Member에 orders를 넣을 필요가 없다.
- 결론
- Order부터 시작하면 된다.
- 객체의 관계를 잘 맺고, 끊을 수 있어야 한다.
...
@OneToMany(mappedBy = "member")
@JoinColumn(name = "MEMBER_ID")
private List<Order> orders = new ArrayList<>();// 초기값 세팅, NPE 예방, 메모리를 약간 잡아먹긴 함
...
2. Order
- orderItems는 비즈니스적으로 가치가 있을 확률이 높다.
- 주문서에 포함된 상품 목록을 찾을 일이 많다.
- 실무에서도 많이 쓴다
..
@ManyToOne // 여러 주문을 한 회원은 하나
@JoinColumn(name = "MEMBER_ID")
private Member member;
...
3. OrderItem
- '1 : 다' 일 때 '다'에 외래키가 존재합니다. 그래서 아래처럼 order, item을 수정한다.
..
@ManyToOne // 여러 주문 상품의 주문은 하나
@JoinColumn(name = "ORDER_ID")
private Order order;
...
@ManyToOne // 여러 상품의 주문 상품은 하나
@JoinColumn(name = "ITEM_ID")
private Item item;
...
4. Item
- 연관관계를 추가해도 된다.
- 보통 상품이 어떤 주문으로 나갔는지 어플리케이션에서는 중요하지 않다.
- 나중에 데이터로 통계를 내기위해서 연관관계를 사용한다.
- 강사의 실무조언
- 핵심은 단방향을 잘 설계하는게 중요하다.
- 비즈니스 상으로는 양방향 연관관계를 설정하는게 나을수도 있다.
- 연관관계의 주인이 아는거는 조회만 할 수 있다.
- 실무에서는 JPQL을 결국 많이 작성하게 된다.
- Order를 조회할 때 OrderItem를 조회하고 싶을 떄가 있다.
- 이 때 양방향 연관관계를 추가하게 된다.
- 하지만 Order, OrderItem을 따로따로 조회해도 된다.
출처
https://www.inflearn.com/course/ORM-JPA-Basic/dashboard
'JPA 프로그래밍' 카테고리의 다른 글
[자바 ORM 표준 JPA 프로그래밍] 다양한 연관관계 매핑 - 일대일( 2/4 ) (0) | 2021.07.17 |
---|---|
[자바 ORM 표준 JPA 프로그래밍] 다양한 연관관계 매핑 - 다대일, 일대다 ( 1/4 ) (0) | 2021.07.14 |
[자바 ORM 표준 JPA 프로그래밍] 연관관계 매핑 기초 - 양방향 연관관계 와 연관관계의 주인( 2/3 ) (0) | 2021.07.07 |
[자바 ORM 표준 JPA 프로그래밍] 연관관계 매핑 기초 - 단방향 연관관계 ( 1/3 ) (0) | 2021.07.05 |
[자바 ORM 표준 JPA 프로그래밍] 실전 예제1 - 요구사항 분석과 기본 매핑 ( 3/3 ) (0) | 2021.07.04 |