Order 엔티티
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString(exclude = "user")
@Builder
@Entity
@Table(name = "`Order`")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int orderNo; // 주문 번호 (PK, 자동증가)
// 주문자 (User)와의 다대일 관계
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "uid", nullable = false)
private User user;
// 주문 상세 항목 리스트 (OrderItem)과의 일대다 관계
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
private List<OrderItem> orderItems;
private int orderTotalPrice; // 총 주문 금액
private String receiverZip; // 우편번호
private String orderAddr; // 배송 주소
@CreationTimestamp
private LocalDateTime orderDate; // 주문 일자 (자동 기록)
private String orderSender; // 보내는 사람 이름
private String senderHp; // 보내는 사람 연락처
private String orderReceiver; // 받는 사람 이름
private String receiverHp; // 받는 사람 연락처
@Lob
private String orderContent; // 배송 요청사항 (Lob: 길이 제한 없는 텍스트)
private String payment; // 결제 수단 (예: "카카오페이", "신용카드" 등)
private String paymentContent; // 결제 상세 정보 (예: 카드 번호)
private int totalQuantity; // 총 주문 수량 (모든 OrderItem 합계)
private int originalTotalPrice; // 할인 전 총 상품금액
private int shippingFee; // 합산 배송비
private int totalDiscount; // 총 할인액 (상품 할인 합계)
private int pointDiscount; // 사용한 포인트
private int couponDiscount; // 쿠폰 할인액
private int totalPoint; // 적립 예정 포인트
}
설명
- orderNo (int)
- 주문 번호 (Primary Key)
@GeneratedValue(strategy = GenerationType.IDENTITY) → DB에서 자동 생성
- user (User)
- 주문자 정보와의 다대일(Many-to-One) 관계
@JoinColumn(name = "uid") → Order 테이블의 uid 컬럼이 User.uid와 매핑
fetch = FetchType.LAZY → 실제 사용할 때 로딩
- orderItems (List<OrderItem>)
- 한 주문에 여러 개의 주문 상세 항목이 연결되는 일대다(One-to-Many) 관계
mappedBy = "order" → OrderItem.order 필드와 매핑
cascade = CascadeType.ALL → Order가 저장·삭제될 때 연관된 OrderItem도 함께 처리
orphanRemoval = true → 부모(주문)에서 분리된 자식 항목(상세)이 자동 제거
- orderTotalPrice (int)
- 이 주문 자체의 “최종 결제 금액” 필드
- (쿠폰·포인트·배송비 반영 후 금액)
- receiverZip / orderAddr (String)
- 배송지 우편번호(
receiverZip)
- 배송지 주소 전체(
orderAddr)
- orderDate (LocalDateTime)
@CreationTimestamp → Order 엔티티가 처음 저장될 때 DB가 자동으로 현재 시간 기록
- orderSender / senderHp / orderReceiver / receiverHp (String)
- orderSender: 주문자 이름 (User.name에서 가져와 저장)
- senderHp: 주문자 연락처 (User.hp)
- orderReceiver: 실제 물건 받을 사람 이름
- receiverHp: 받는 사람 연락처
- orderContent (String, @Lob)
- 배송 요청사항 등의 추가 메시지
@Lob → 긴 텍스트도 저장 가능
- payment / paymentContent (String)
- payment: 결제 수단(문자열)
- paymentContent: 결제 세부 정보(카드 번호 등 임시 또는 실제 값)
- 총·할인 관련 필드
- totalQuantity (int): 주문된 상품 총 개수 (주문 항목별 수량 합계)
- originalTotalPrice (int): 할인 적용 전 상품 금액 합계
- shippingFee (int): 주문별 합산 배송비
- totalDiscount (int): 상품별 할인액 합계
- pointDiscount (int): 사용한 포인트 금액
- couponDiscount (int): 쿠폰 할인액
- totalPoint (int): 주문 완료 후 적립될 포인트