순환참조 막는방법엔 JsonBackReference를 이용하는 방법이 있지만
package com.teamsparta.moamoa.domain.product.model
import com.teamsparta.moamoa.infra.BaseTimeEntity
import jakarta.persistence.*
@Entity
@Table(name = "product_stock")
data class ProductStock(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long? = null,
// @JsonBackReference
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "product_id")
var product: Product,
@Column(name = "stock")
var stock: Int,
@Column(name = "product_name")
val productName: String,
) : BaseTimeEntity() {
companion object
fun discountForTest(num: Int): ProductStock {
val discountNum = stock - num
return ProductStock(
id = id!!,
stock = discountNum,
productName = productName,
product = product,
)
}
fun discount(num: Int) {
this.stock - num
}
}
@Entity
@Table(name = "product")
data class Product(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long? = null,
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "sellerId", nullable = false)
var seller: Seller,
@Column(name = "price", nullable = false)
var price: Double,
@Column(name = "title", nullable = false)
var title: String,
@Column(name = "content", nullable = false)
var content: String,
@Column(name = "purchaseAble", nullable = false)
var purchaseAble: Boolean,
@Column(name = "ratingAverage", nullable = true)
var ratingAverage: Double? = null,
@Column(name = "imageUrl", nullable = true)
var imageUrl: String,
@Column(name = "likes", nullable = true)
var likes: Int,
@Column(name = "userLimit")
val userLimit: Int,
@Column(name = "discount")
val discount: Double,
@Column(name = "is_sold_out", nullable = false)
var isSoldOut: Boolean = false,
) : BaseTimeEntity()
이것처럼 스톡에만 상품과 연관관계가 되어있고 상품엔 스톡이 안걸려 있게 하면서 회피할수있다