不接受嵌入对象的空值
Null-values for embedded objects are not accepted
我正在尝试使用 Spring 数据 JDBC 来持久化一个包含嵌入式对象的对象。而且它没有被保存,因为它没有通过 null 检查。
我创建了一个外部 class 来坚持。
data class Outer(
@Id
val id: Long,
val value: String,
@Embedded
inner: Inner? = null
)
data class Inner(
val innerValue1: String,
val innerValue2: String
)
在数据库中,我希望 Outer
只有一个 table,其中包含字段 id
、value
、inner_value_1
和 inner_value_2
.这就是为什么我在 inner
字段上放置 @Embedded
注释。
id
和 value
应该是必填字段。 innver_value_1
和 invver_value_2
可能为空,
当我尝试保存空内部对象(在 Kotlin 和数据库中都可以为空)时出现问题。
val outer = Outer(15, "value")
repo.save(outer) //throws an exception
保存到 repo 操作抛出异常,原因是期望内部不为空:
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 中,我无法传递具有空值字段的对象(因为它们不可为空)。
有什么方法可以保存 empty/null 嵌入对象吗?
此问题记录在 DATAJDBC-364 中,并已针对 1.1 M4 里程碑修复。
请注意,这与 DATAJDBC-374 有关,这将使如何加载这些嵌入式实体成为可配置的。
我正在尝试使用 Spring 数据 JDBC 来持久化一个包含嵌入式对象的对象。而且它没有被保存,因为它没有通过 null 检查。
我创建了一个外部 class 来坚持。
data class Outer(
@Id
val id: Long,
val value: String,
@Embedded
inner: Inner? = null
)
data class Inner(
val innerValue1: String,
val innerValue2: String
)
在数据库中,我希望 Outer
只有一个 table,其中包含字段 id
、value
、inner_value_1
和 inner_value_2
.这就是为什么我在 inner
字段上放置 @Embedded
注释。
id
和 value
应该是必填字段。 innver_value_1
和 invver_value_2
可能为空,
当我尝试保存空内部对象(在 Kotlin 和数据库中都可以为空)时出现问题。
val outer = Outer(15, "value")
repo.save(outer) //throws an exception
保存到 repo 操作抛出异常,原因是期望内部不为空:
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 中,我无法传递具有空值字段的对象(因为它们不可为空)。
有什么方法可以保存 empty/null 嵌入对象吗?
此问题记录在 DATAJDBC-364 中,并已针对 1.1 M4 里程碑修复。 请注意,这与 DATAJDBC-374 有关,这将使如何加载这些嵌入式实体成为可配置的。