代码之家  ›  专栏  ›  技术社区  ›  fanjavaid

JPA@OneToMany不保存父ID

  •  1
  • fanjavaid  · 技术社区  · 8 年前

    我使用Spring Boot和JPA开发API

    {
        "name": "Rice",
        "description": "Lorem ipsum dolor sit amet",
        "variants": [
            {
                "amount": 1,
                "unit": "kg",
                "price": 60000
            }
        ]
    }
    

    这是我的模型:

    产品.kt

    data class Product(
            @Id
            @GeneratedValue
            var id: Long = 0,
            var name: String = "",
            var photo: String = "",
            var description: String = "",
    
            @OneToMany(mappedBy = "product", cascade = [CascadeType.ALL])
            @JsonBackReference
            var variants: MutableList<Variant> = mutableListOf()
    )
    

    @Entity
    data class Variant(
            @Id
            @GeneratedValue
            var id: Long = 0,
            var amount: Int = 0,
            var unit: String = "",
            var price: Double = 0.0,
    
            @ManyToOne(fetch = FetchType.LAZY)
            @JoinColumn(name = "product_id")
            @JsonManagedReference
            var product: Product? = null
    )
    

    是否需要应用其他配置? 谢谢你

    1 回复  |  直到 8 年前
        1
  •  1
  •   Simon Martinelli    8 年前

    问题是,在JSON反序列化期间,没有设置从Variant到Product的反向引用。

    你定义了

    @OneToMany(mappedBy = "product", cascade = [CascadeType.ALL])
    @JsonBackReference
    var variants: MutableList<Variant> = mutableListOf()
    

    你有两个选择:

    1. 或者在保存产品之前在Variant中设置产品引用