본문 바로가기

카테고리 없음

순환참조 회피

순환참조 막는방법엔 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()

이것처럼 스톡에만 상품과 연관관계가 되어있고 상품엔 스톡이 안걸려 있게 하면서 회피할수있다