1

我正在尝试使用 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包含字段idvalueinner_value_1的表inner_value_2。这就是我在-field上添加@Embedded注释的原因。inner

id并且value应该是必填字段。innver_value_1并且invver_value_2可能为空,

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

val outer = Outer(15, "value")

repo.save(outer) //throws an exception

保存到 repo 操作会引发异常,原因是期望 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 中,我无法传递具有空值字段的对象(因为它们不可为空)。

有没有办法保存一个空/空的嵌入对象?

4

1 回答 1

1

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

于 2019-05-22T06:22:08.257 回答