gpt4 book ai didi

spring-boot - JPA @OneToMany 不保存父 ID

转载 作者:行者123 更新时间:2023-12-02 13:38:30 25 4
gpt4 key购买 nike

我使用 Spring Boot 和 JPA 开发 API

我在双向 OneToMany 关系中发现了一个案例,当 JSON 有效负载请求时,我的父 ID 不会保存在数据库中,如下所示:

{
"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()
)

变体.kt
@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
)

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

最佳答案

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

你定义

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

mappedBy 表示后向引用是拥有方,因此负责设置外键。

你有两个选择:
  • 在保存产品之前在 Variant 中设置产品引用
  • 或者您从 Variant 中删除对 Product 的反向引用,并从 variables 集合中删除 mappedBy = "product"。
  • 关于spring-boot - JPA @OneToMany 不保存父 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50550280/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com