이번 수업에는 실전 예제를 가지고 직접 실습해 보는 것이다.
문제
- 회원과 주문의 관계: 회원은 여러 번 주문할 수 있다. (일대다)
- 주문과 상품의 관계: 주문할 때 여러 상품을 선택할 수 있다. 반 대로 같은 상품도 여러 번 주문될 수 있다. 주문상품이라는 모델을 만들어서 다대다 관계를 일다대, 다대일 관계로 풀어냄
관계형 데이터베이스에 맞춰서 설계해보기
1. MEMBER
package jpabook.jpashop.domain;
import javax.persistence.*;
@Entity
public class Member {
@Id @GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "MEMBER_ID")
private Long id;
private String name;
private String city;
private String zipcode;
...Getter/ Setter
}
2. ORDER
package jpabook.jpashop.domain;
import javax.persistence.*;
import java.time.LocalDateTime;
@Entity
@Table(name = "ORDERS")
public class Order {
@Id @GeneratedValue
@Column(name = "ORDER_ID")
private Long id;
@Column(name = "MEMBER_ID")
private Long memberId;
private LocalDateTime orderDate;
@Enumerated(EnumType.STRING)
private OrderStatus status;
...Getter/Setter
}
3.ORDERITEM
package jpabook.jpashop.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class OrderItem {
@Id @GeneratedValue
@Column(name = "ORDER_ITEM_ID")
private Long id;
@Column(name = "ORDER_ID")
private Long orderId;
@Column(name = "ITEM_ID")
private Long itemId;
private int orderPrice;
private int count;
...Getter/Setter
}
4.ITEM
package jpabook.jpashop.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Item {
@Id @GeneratedValue
@Column(name = "ITEM_ID")
private Long id;
private String name;
private int price;
private int stockQuantity;
...Getter/Setter
}
문제점
지금 위에 설계 방식은 객체 설계를 테이블 설계에 맞춘 방식이다.
테이블의 외래키를 객체에 그대로 가져온다.
그러므로 객체 그래프 탐색이 불가능하다. 예를 들면 Order에서 주문한 사람을 찾고 싶다고 가정하면
Order order = em.find(Order.class, 1L);
Long memberId = order.getMemberId();
Member member = em.fid(Member.class, memberId);
//MemberId를 넣어서 또 찾아야함 객체지향 스럽지 못함
이것에 대한 해결책을 ORDER 부분에서 private Long memberId가 아닌 private Member meber;로 설계하는 것이다.
이러면 order.getMember()로 바로 찾을 수 있다. 이러면 객체 그래프 탐색이 가능해진다.
위 설계는 참조 또한 없으므로 UML도 잘못되었다.
강의 출처 : https://www.inflearn.com/course/ORM-JPA-Basic
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의
JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런
www.inflearn.com
'BackEnd > 자바 ORM 표준 JPA 프로그래밍' 카테고리의 다른 글
JPA 양방향 연관관계 (0) | 2022.12.23 |
---|---|
JPA 단방향 연관관계 (0) | 2022.12.23 |
JPA 엔티티 매핑(필드와 컬럼 매핑, 기본 키 매핑) (1) | 2022.12.22 |
JPA 엔티티 매핑(객체와 테이블 매핑) (0) | 2022.12.22 |
JPA 영속성 관리 - 내부 동작 방식 (0) | 2022.12.22 |