以字段名称为输入的Corda自定义查询

时间:2019-10-09 10:51:23

标签: kotlin corda

我正在使用Corda 4.0,并且想使用动态列名(colN)和列值(colC)运行自定义查询。这是我用于查询构建的代码

builder {
     val index: CriteriaExpression.ColumnPredicateExpression<Any,String> = getField(colN,CarSchemaV1.PersistentCar::class.java).equal(colC)
     val customCriteria = QueryCriteria.VaultCustomQueryCriteria(index)
}

但是我在编译时遇到了错误

Type parameter bound for L in constructor VaultCustomQueryCriteria<L: PersistableState>(expression: CriteriaExpression<L,Boolean>,...) is not satisfied: inferred typed Any is not a subtype of StatePersistable

1 个答案:

答案 0 :(得分:0)

这里的问题与您在Any的泛型中使用CriteriaExpression.ColumnPredicaeExpression<Any, String>有关。如错误消息所示,应该使用Any

的子类型,而不要使用StatePersistable

根据文档:net.corda.core.schemas.StatePersistable Marker interface to denote a persistable Corda state entity that will always have a transaction id and index

您的模式CarSchemaV1.PersistentCar::class.java可能实现PersistentState。尝试将其添加到您的泛型中。

val index: CriteriaExpression.ColumnPredicateExpression<CarSchemaV1.PersistentCar,String> = getField(colN,CarSchemaV1.PersistentCar::class.java).equal(colC)