我正在尝试使用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
有一个表,其中包含字段id
,value
,inner_value_1
和inner_value_2
。这就是为什么我在@Embedded
字段上放置inner
注释。
id
和value
应该是必填字段。 innver_value_1
和invver_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中,我无法传递具有空值字段的对象(因为它们不可为空)。
有什么方法可以保存空/空的嵌入式对象?