JPA @OneToMany не сохраняет родительский идентификатор - PullRequest
0 голосов
/ 27 мая 2018

я разрабатываю API, используя Spring Boot и JPA

Я обнаружил случай в двунаправленной взаимосвязи OneToMany, мой родительский идентификатор не сохраняется в БД при запросе JSON:

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

Вот моя модель:

Product.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()
)

Variant.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
)

IsЕсть ли какие-либо другие конфигурации должны быть применены?Спасибо

1 Ответ

0 голосов
/ 27 мая 2018

Проблема в том, что во время десериализации JSON обратная ссылка из Варианта в Продукт не установлена.

И вы определяете

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

mappedBy говорит, что обратная ссылка является владельцеми поэтому отвечает за установку внешнего ключа.

У вас есть два варианта:

  1. Либо вы устанавливаете ссылку на продукт в Variant перед сохранением продукта

  2. или удалите обратную ссылку из варианта в Product и удалите mappedBy = "product" из коллекции вариантов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...