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)
}
考虑以下状态:
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)
}