본문 바로가기

IT/JPA

JPA Entity를 만들어 보자

JPA Entity 만들기

스프링으로 프로젝트를 진행할때 ORM으로 진행한다.
그때 Entity를 만들어 DB와 매핑을 하는데 오늘은 Entity작성법을 알아보고 다음편에는 관련 속성에 관하여 정리를 해보고자 한다.
- 이글의 목적은 Entity를 만들때마다 생각이 가물가물한 경우가 많아서 대략적인 구조를 정리하는 차원이다.
- 참고로 작성된 언어는 KOTLIN으로 작성되었다.

시나리오

1. 고객정보를 담은 Customer Entity 작성
2. 상품을 판매하는 판매자 Entity작성
3. 판매자가 운영하는 가게 정보를 담은 Entity작성
4. 판매하는 상품의 정보를 담은 Entity 작성
5. 판매하는 상품의 옵션 정볼를 담은 Entity 작성
6. 주문 정보를 담은 Entity 작성
7. 주문한 가게의 정보를 담은 Entity 작성
8. 주문한 옵션 정보를 담은 Entity 작성
9. 결제 정보를 담은 Entity 작성
  • 만들고자 하는 대략 적인 연관관계는 다음과 같다.
- Customer : 상품을 구매하는 고객
- Seller : 상품을 판매하는 판매자
- Shop : 판매자가 운영하는 가게
- Product : 가게에서 판매하는 상품
- Product_Option : 판매하는 상품의 옵션
- Order : 상품 주문 내역
- Order_item : 주문한 옵션 내역
- Payment : 결제 정보

Customer Entity

@Entity
class Customer(
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  val id: Long,
  val email: String,
  val password: String,
  val name: String,
​
)

Seller Entity

@Entity
class Seller(
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  val id: Long,
  val email: String,
  @JsonIgnore
  var password: String,

  @JvmSuppressWildcards
  @BatchSize(size = 100)
  @OneToMany(mappedBy = "seller")
  val shops: MutableList<Shop>
​
)

Shop Entity

@Entity
class Shop(
  @Id
  @GeneratedValue(starategy = GenerationType.IDENTITY)
  val id: Long,

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "seller_id")
  var seller: Seller,

  var shopName: String,
  var ownerName: String,
  var bank: String

)

Product Entity

@Entity
class Product(
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  val id: Long,

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "shop_id")
  val shop: Shop,

  @Enumerated(EnumType,STRING)
  var saleState: SaleStatus,

  var title: String,
  var price: Long,
  var salePrice: Long,
​
)

Product_Option Entity

@Entity
class ProductOption(
  @Id
  @GeneratedValue(starategy = GenerationType.IDENTITY)
  val id: Long,

  @JsonIgnore
  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "product_id")
  val product: Product,
  val title: String,
  val price: Long,

  @Enumerated(EnumType.STRING)
  val saleStatus: SaleStatus,

)

Order Entity

@Entity
class Orders(
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  val id: Long,

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "customer_id")
  val customer: Customer,

  @Enumerated(Enumtype.STRING)
  var status: OrdersStatus,

  val price: Long,
  val optionPrice: Long,
  val paymentPrice: Long
)

OrderShop Entity

@Entity
class OrderShop(
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  val id: Long,

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "order_id")
  val order: Orders,

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "shop_id")
  val shop: Shop
​
)

OrderItem Entity

@Entity
class OrderItem(
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  val id: Long,

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "customer_id")
  val customer: Customer,

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "product_id")
)

Payment Entity

@Entity
class Payment(
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  val id: Long,

  @ManyToOne(fetch = FetchThpe.LAZY)
  @JoinColumn(name = "orders_id")
  val orders: Orders,
  val price: Long,
  val customerName: String,
  val card: String,
  val cardNumber: String,
​
)
정리 : 고객이 판매자가 등록한 상품을 주문하고 결제하는 시나리오의 대략적인 Entity를 만들어 보았다.
      다음시간에는 여기에 사용된 Entity속성들에 대해 알아보고 정리하는 시간을 갖겠다.