首页 > 解决方案 > Corda - 使用 VaultCustomQueryCriteria 的问题

问题描述

我正在尝试将 VaultCustomQueryCriteria ( Corda - Java ) 与聚合函数SUM一起使用,但我没有得到任何结果。

如果我使用另一个 VaultCustomQueryCriteria,则查询有效。

我究竟做错了什么?

下面是一些例子:

查询确定:

QueryCriteria statusCriteria = new QueryCriteria.VaultQueryCriteria(Vault.StateStatus.UNCONSUMED);

Field name = ExampleSchemaV1.Ingestion.class.getDeclaredField("name");

QueryCriteria countCriteria = new QueryCriteria.VaultCustomQueryCriteria(Builder.equal(name, "Mark"));
List<StateAndRef<IngestionState>> results = rpcOps.vaultQueryByCriteria(countCriteria,IngestionState.class).getStates();

查询 KO:(无结果)

QueryCriteria statusCriteria = new QueryCriteria.VaultQueryCriteria(Vault.StateStatus.UNCONSUMED);

Field nr = ExampleSchemaV1.Ingestion.class.getDeclaredField("nr");    
Field name = ExampleSchemaV1.Ingestion.class.getDeclaredField("name");

CriteriaExpression sumQta = Builder.sum(nr, Arrays.asList(name));    
QueryCriteria sumQtaCriteria = new QueryCriteria.VaultCustomQueryCriteria(sumQta);

QueryCriteria criteria = statusCriteria.and(sumQtaCriteria);

List<StateAndRef<IngestionState>> results = rpcOps.vaultQueryByCriteria(criteria,IngestionState.class).getStates();

标签: blockchaincorda

解决方案


每个保管库查询都返回一个Vault.Page对象。执行求和查询时,求和的结果可以通过 访问Vault.Page.getOtherResults(),而不是通过Vault.Page.getStates()

这是因为 sum 查询不返回任何实际状态,而是返回这些状态的计算结果。


推荐阅读