Нулевые значения для встроенных объектов не принимаются - PullRequest
1 голос
/ 16 апреля 2019

Я пытаюсь сохранить объект, содержащий встроенный объект, используя Spring Data JDBC.И он не сохраняется, потому что он не проходит нулевую проверку.

Я создал внешний класс для сохранения.

data class Outer(
    @Id 
    val id: Long,

    val value: String,

    @Embedded 
    inner: Inner? = null
)
data class Inner(
    val innerValue1: String,
    val innerValue2: String
)

В БД я хотел бы иметь толькоодна таблица для Outer, которая содержит поля id, value, inner_value_1 и inner_value_2.Вот почему я ставлю аннотацию @Embedded в поле inner.

id и value должны быть обязательными полями.innver_value_1 и invver_value_2 могут быть нулевыми,

Проблема возникает, когда я пытаюсь сохранить нулевой внутренний объект (который можно обнулять как в Kotlin, так и в БД).

val outer = Outer(15, "value")

repo.save(outer) //throws an exception

Операция сохранения в репо генерирует исключение, причина которого ожидает, что внутреннее не будет нулевым:

Caused by: java.lang.IllegalArgumentException: Target bean must not be null!
    at org.springframework.util.Assert.notNull(Assert.java:198)
    at org.springframework.data.mapping.model.BasicPersistentEntity.verifyBeanType(BasicPersistentEntity.java:550)
    at org.springframework.data.mapping.model.BasicPersistentEntity.getPropertyAccessor(BasicPersistentEntity.java:453)

Сложность состоит в том, что в Kotlin я не могу передать объект с полями с нулевым значением (потому что они не обнуляются),

Есть ли способ сохранить пустой / нулевой внедренный объект?

1 Ответ

1 голос
/ 22 мая 2019

Эта проблема задокументирована в DATAJDBC-364 и исправлена ​​для этапа 1.1 M4.Обратите внимание, что это связано с DATAJDBC-374 , что позволяет настраивать загрузку этих встроенных объектов.

...