#postgresql #kotlin #spring-data #spring-data-jdbc
#postgresql #котлин #spring-данные #spring-data-jdbc #kotlin
Вопрос:
Я пытаюсь сохранить объект, содержащий встроенный объект, используя 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, так и в DB).
val outer = Outer(15, "value")
repo.save(outer) //throws an exception
Операция сохранения в репозиторий вызывает исключение, потому что ожидается, что значение inner не будет равно null:
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. Похоже, это ошибка. Пожалуйста, создайте проблему на jira.spring.io/browse/DATAJDBC
2. Похоже, это уже произошло: jira.spring.io/browse/DATAJDBC-364
3. спасибо, @JensSchauder. Это мой билет.
Ответ №1:
Эта проблема задокументирована в DATAJDBC-364 и исправлена для этапа 1.1 M4. Пожалуйста, обратите внимание, что это связано с DATAJDBC-374, который позволяет настраивать способ загрузки этих встроенных объектов.