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] 연관된 이미지 정보

}

설명

  1. prodNo
  2. subCategory (@ManyToOne)
  3. seller (@ManyToOne)
  4. 가격/재고/판매 관련 필드
  5. 리뷰/평점 관련 필드
  6. state
  7. 등록일 및 조회수
  8. [1:1] 연관관계