Нулевые значения для встроенных объектов не принимаются

Я пытаюсь сохранить объект, содержащий встроенный, с помощью 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 могут быть нулевыми,

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

val outer = Outer(15, "value")

repo.save(outer) //throws an exception

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

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 я не могу передать объект с полями с нулевым значением (потому что они не допускают значения NULL).

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


person youngDev    schedule 16.04.2019    source источник
comment
Кажется, это ошибка. Создайте проблему на странице jira.spring.io/browse/DATAJDBC   -  person Jens Schauder    schedule 17.04.2019
comment
Похоже, это уже произошло: jira.spring.io/browse/DATAJDBC-364   -  person Jens Schauder    schedule 17.04.2019
comment
спасибо, @JensSchauder. Это мой билет.   -  person youngDev    schedule 17.04.2019


Ответы (1)


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

person Jens Schauder    schedule 22.05.2019