Corda - 空列的自定义 Vault 查询不起作用

Corda - Custom Vault Query for Null Column Not Working

考虑以下状态:

data class Example(val number: Int?, override val participants: List<AbstractParty>) : QueryableState {

    override fun generateMappedObject(schema: MappedSchema): PersistentState = when (schema) {
        is ExampleEntity.ExampleSchema.ExampleSchemaV1 -> ExampleEntity(number = number)
        else -> throw IllegalArgumentException("Unrecognised schema: $schema.")
    }

    override fun supportedSchemas(): Iterable<MappedSchema> {
        return listOf(ExampleEntity.ExampleSchema.ExampleSchemaV1)
    }
}

此外,请考虑以下实体:

@Entity
@Table(name = "example_states")
class ExampleEntity(
    @Column(name = "number", nullable = true)
    val number: Int? = null
) : PersistentState() { ... }

在查询中,我使用了以下条件表达式:

ExampleEntity::number.equal(null)

这似乎无法正确查询 number 的行条目为空的州。我做错了什么吗?

似乎 null 和 not null 是独立处理的。 null 的标准表达式为:

ExampleEntity::number.isNull()

因此需要实现额外的逻辑才能正确执行查询:

expression = if(number == null) {
    ExampleEntity::number.isNull()
} else {
    ExampleEntity::number.equal(number)
}