Product 엔티티
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Builder
@Entity
@Table(name = "Product")
public class Product {
@Id
private String prodNo; // 상품 번호 (Primary Key)
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "subCateNo") // 외래키: SubCategory
private SubCategory subCategory;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "seller") // 외래키: Seller
private Seller seller;
private String prodName; // 상품명
private String company; // 판매자 회사명
private String prodBrand; // 브랜드명
private int prodPrice; // 정가
private int prodPoint; // 적립 포인트
private int prodStock; // 재고 수량
private int prodSold; // 판매 수량
private int prodDiscount; // 할인율(%)
private int prodDeliveryFee; // 배송비
private String prodContent; // 상세 설명(텍스트)
private String state; // 상품 상태 (예: "판매", "중단")
@CreationTimestamp
private LocalDateTime regDate; // 등록일시 자동 설정
private int hit; // 조회수
private double ratingTotal; // 리뷰 총점 합계
private int reviewCount; // 리뷰 개수
private double ratingAvg; // 평균 평점
@OneToOne(mappedBy = "product", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private ProductDetail productDetail; // [1:1] 연관된 상세 정보
@OneToOne(mappedBy = "product", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private ProductImage productImage; // [1:1] 연관된 이미지 정보
}
설명
prodNo
- 상품 고유 식별자. Primary Key로 사용.
subCategory (@ManyToOne)
- 다대일 관계로, 하나의
Product가 특정 SubCategory에 속함.
fetch = LAZY로 지연 로딩.
seller (@ManyToOne)
- 다대일 관계로, 하나의
Product가 특정 Seller(판매자)에게 속함.
- 가격/재고/판매 관련 필드
prodPrice(정가), prodDiscount(할인율), prodDeliveryFee(배송비)
prodStock(재고 수량), prodSold(판매량)
- 리뷰/평점 관련 필드
ratingTotal(평점 총합), reviewCount(리뷰 개수), ratingAvg(평균 평점)
state
- 등록일 및 조회수
@CreationTimestamp regDate로 등록 시각 자동 저장
hit 필드로 조회수 카운트
- [1:1] 연관관계
productDetail: ProductDetail 엔티티와 1:1 매핑. 상세 스펙, 옵션 정보 보관
productImage: ProductImage 엔티티와 1:1 매핑. 메인 이미지, 상세 이미지 경로 보관
- 엔티티 역할:
- DB 테이블
Product와 매핑되며, 상품 기본 속성(이름, 가격, 재고, 평점 등)과 상위 카테고리, 판매자, 이미지·상세 정보 연관 관계를 정의.
- Application 측면:
- 상품 목록 조회, 상세 조회, 재고/판매량 업데이트, 리뷰 집계, 이미지 표시 등에 사용.
- Cascade 설정:
cascade = ALL로 Product 저장/삭제 시 연결된 ProductDetail, ProductImage도 함께 처리됨.