728x90
반응형
매핑예제
실제로 도메인을 분석 하고 설계 해본다.
참고로 getter, setter 는 생략했다.
도메인 모델 분석
- 회원은 주문을 여러번 할 수 있다.
- 주문 할때 여러개의 상품을 선택 할 수 있다.
- 같은 상품도 여러번 주문이 가능하다.
- 주문과 상품 사이에 다대다 관계를 주문 상품을 넣어 1:N, N:1 로 풀어낸다.
테이블 설계
각각 도메인은 다음과 같은 속성을 가진다.
그것을 테이블로 만들었다.
엔티티 설계와 매핑
엔티티설계는 다음과 같다.
구현
Member(회원)
@Entity
public class Member {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
// 이렇게 규약을 정해주면 알아보기 쉽다.
@Column(length = 10)
private String name;
private String city;
private String street;
private String zipCode;
}
참고사항
- Id 필드
@Column(name = "MEMBER_ID"): DB 저장시 저장될 컬럼명을 지정해주었다.
@Id: 기본키 로 지정했다.
@GeneratedValue: 자동으로 PK 값이 생성되도록 정의해 주었다. - name 필드
@Column(length = 10): 최대길이를 10으로 지정해 주었다.
Order(주문)
@Entity
@Table(name = "ORDERS")
public class Order {
@Id
@GeneratedValue
@Column(name = "ORDER_ID")
private Long id;
// 누가 주문했는지 알기 위한 식별자
// 하지만 객체 지향 설계가 아니다.
// order에서 직접 멤버를 겟 하는게 객체지향 스럽다.
@Column(name = "MEMBER_ID")
private Long memberId;
//객체지향스럽게 멤버를 정의한다.
private Member member;
//DB 에 저장되는 컬럼 관례는 다음과 같다.
// ORDER_DATA 또는 order_date
// 캐멀을 언더스코어로 변경하는 것이 많다.
private LocalDateTime orderDate;
@Enumerated(EnumType.STRING)
private OrderStatus status;
}
참고사항
- status 필드
@Enumerated(EnumType.STRING): DB 에 enum 타입을 저장할때 String으로 저장되게 설정.
OrderItem(주문상품)
@Entity
public class OrderItem {
@Id @GeneratedValue
@Column(name = "ORDER_ID")
private Long orderId;
@Column(name = "ITEM_ID")
private Long itemId;
private int orderPrice;
private int count;
}
상품(Item)
@Entity
public class Item {
@Id @GeneratedValue
@Column(name = "ITEM_ID")
private Long id;
private String name;
private int price;
private int stockQuantity;
}
참고: https://www.inflearn.com/course/ORM-JPA-Basic/lecture/21695?tab=curriculum&speed=1
728x90
반응형
'DataBase > JPA' 카테고리의 다른 글
[JPA] 연관관계 매핑기초2: 양방향 연관관계 (0) | 2021.08.02 |
---|---|
[JPA] 연관관계 매핑기초1: 단방향 연관관계 (0) | 2021.08.01 |
[JPA] 기본키 맵핑 (0) | 2021.07.31 |
[JPA] 데이터베이스 스키마 자동 생성 (0) | 2021.07.30 |
[JPA] 엔티티, 테이블, 컬럼 매핑 (0) | 2021.07.30 |
댓글