使用LinearStateQueryCriteria时,如何按修改顺序排序查询的输出

时间:2018-06-19 09:26:36

标签: kotlin corda

使用LinearStateQueryCriteria时,

假设我有以下状态都具有相同的linearId,

S4 (unconsumed) created at t4 
S3 (consumed)   created at t3
S2 (consumed)   created at t2
S1 (consumed)   created at t1

如何检索具有StateStatus = CONSUMED的最新状态?是否可以按某个时间戳对结果列表进行排序?

2 个答案:

答案 0 :(得分:1)

应该可以使用status = Vault.StateStatus.CONSUMED,然后在queryBy中指定排序

val queryService = VaultQueryService<YourModelStateClass>
val criteria = QueryCriteria.LinearStateQueryCriteria(status = Vault.StateStatus.CONSUMED)
queryService.queryBy(
            criteria = criteria,
            sorting = Sort(
              setOf(
                Sort.SortColumn(
                  SortAttribute.Custom(
                    YourModelStateSchema::class.java,
                    YourModelStateSchema::updatedDatetime.name), 
                  Sort.Direction.DESC
                )
              )
            )
          )

答案 1 :(得分:1)

您可以尝试为vaultQueryBy函数指定排序条件,如:

 val sortAttribute = SortAttribute.Standard(Sort.VaultStateAttribute.RECORDED_TIME)
    val criteria = QueryCriteria.VaultQueryCriteria(stateRefs = listOf(stateRefs.first(), stateRefs.last()))
  val results = rpcOps.vaultQueryBy<IOUState>(criteria, sorting = Sort(setOf(Sort.SortColumn(sortAttribute, Sort.Direction.ASC))))