postgresql - 不接受嵌入对象的空值

标签 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 可能为空,

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

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

最佳答案

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

关于postgresql - 不接受嵌入对象的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55705377/

相关文章:

ruby-on-rails - Rails 4 - 加入 AND 子句

Android Kotlin 对回收站 View 中点击事件的新 Intent

java - 如何使用 Spring Data JPA 发出修改查询以通过其 ID 删除一组实体?

java - Spring Data MongoDB "_class"错误的设计模式

postgresql - 在哪里定义 Postgres 中的最大连接数?

c++ - PostgreSQL不支持嵌套的BEGIN和END语句,即使它不支持自主事务?

java - Kotlin 中的 Class<?> clazz

java - Spring-Data-Neo4J::如何在关系中保存数组或枚举?

python - postgres_psycopg2 的一些问题

ftp - 如何使用Kotlin在android studio中使用FTP上传小文件或图片