728x90
https://un-lazy-midnight.tistory.com/90
JPA | 필드와 컬럼 매핑, 기본 키 매핑
필드 - 컬럼 매핑 아래와 같은 요구사항이 주어진다고 가정해보자. 1. 회원은 일반회원/관리자로 구분 2. 회원 가입일과 수정일이 존재 3. 회원을 설명하는 필드가 있고 이 필드는 길이 제한이 없
un-lazy-midnight.tistory.com
이번 글에서는 지난 글의 기본 매핑을 실전 예제를 통해 알아본다.
요구사항 분석
회원은 상품을 주문할 수 있음
주문 시 여러 종류의 상품을 선택할 수 있음
도메인 모델 분석
회원-주문 관계: 회원은 여러 번 주문할 수 있음(일대다)
주문-상품 관계: 주문할 때 여러 상품을 선택할 수 있음. 반대로 상품도 여러 번 주문될 수 있음. 주문상품이라는 모델을 만들어서 다대다 관계를 일대다, 다대일 관계로 풀어냄.
테이블 설계
엔티티 설계와 매핑
예제 코드)
Member.java
@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;
//Getter, Setter...
Order.java
@Entity
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...
}
public enum OrderStatus {
ORDER, CANCEL
}
Item.java
@Entity
public class Item {
@Id
@GeneratedValue
@Column(name="item_id")
private Long id;
private String name;
private int price;
private int stockQuantity;
//Getter, Setter...
}
OrderItem.java
@Entity
public class OrderItem {
@Id
@GeneratedValue
@Column(name="order_item_id")
private Long id;
@JoinColumn(name="item_id")
private Long itemId;
@Column(name="order_id")
private Long orderId;
private int orderPrice;
private int count;
//Getter, Setter...
}
하지만 Order.java의 memberId를 가져오는 방식은 객체지향 적인 방법이 아님
따라서 다음과 같이 수정하는 것이 좋다
@Entity
public class Order {
@Id @GeneratedValue
@Column(name="order_id")
private Long id;
private Member member; //수정
private LocalDateTime orderDate;
@Enumerated(EnumType.STRING)
private OrderStatus status;
...
//Getter, Setter...
}
초기의 데이터 중심 설계의 문제점은 다음과 같다.
- 현재 방식은 객체 설계를 테이블 설계에 맞춘 방식이다.
- 테이블의 외래키를 객체에 그대로 가져옴
- 객체 그래프 탐색이 불가능
- 참조가 없으므로 UML도 잘못됨
그러므로 연관관계 매핑에 대해 알아야 올바른 객체지향적 설계가 가능하다.
다음 글에서는 연관관계 매핑에 대해 알아보자.
728x90
'💻dev > 🌱Java+Spring' 카테고리의 다른 글
JPA | 양방향 연관관계와 연관관계의 주인, mappedBy가 뭔데? (0) | 2023.04.29 |
---|---|
JPA | 연관관계 매핑 - 단방향 연관관계 (0) | 2023.04.29 |
JPA | 필드와 컬럼 매핑, 기본 키 매핑 (0) | 2023.04.29 |
JPA | 엔티티 매핑 : @Entity, @Table, 데이터베이스 스키마 자동 생성 (0) | 2023.04.27 |
JPA | 플러시와 준영속 상태를 알아보자 (0) | 2023.04.27 |