不接受嵌入对象的空值

时间:2019-04-16 09:53:53

标签: postgresql kotlin spring-data spring-data-jdbc

我正在尝试使用Spring Data JDBC持久化包含嵌入式对象的对象。而且它没有保存,因为它没有通过null检查。

我创建了一个持久化的外部类。

data class Outer(
    @Id 
    val id: Long,

    val value: String,

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

在数据库中,我只希望Outer有一个表,其中包含字段idvalueinner_value_1inner_value_2。这就是为什么我在@Embedded字段上放置inner注释。

idvalue应该是必填字段。 innver_value_1invver_value_2可能为空,

当我尝试保存null-inner对象(在Kotlin和DB中都可以为null)时,出现问题。

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中,我无法传递具有空值字段的对象(因为它们不可为空)。

有什么方法可以保存空/空的嵌入式对象?

1 个答案:

答案 0 :(得分:0)

此问题记录在DATAJDBC-364中,已针对1.1 M4里程碑进行了修复。 请注意,这与DATAJDBC-374有关,这使得可以配置如何加载这些嵌入式实体。