blockchain - 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();
解决方案
每个保管库查询都返回一个Vault.Page
对象。执行求和查询时,求和的结果可以通过 访问Vault.Page.getOtherResults()
,而不是通过Vault.Page.getStates()
。
这是因为 sum 查询不返回任何实际状态,而是返回这些状态的计算结果。
推荐阅读
- ios - iOS:iPhone 11 Pro 上的手电筒级别
- aws-lambda - 在 serverless.yml 文件中,如何自定义默认的 http 响应模板?
- arrays - 在唯一元素上过滤 ARRAY of ARRAY of STRINGS
- c# - 在 Unity3D 中序列化嵌套的 JSON 数组
- python - 将 Minimax 与 Alpha-Beta Pruning 结合使用时如何找到最佳节点
- android - 如何在 ViewModel 中安全关闭数据库?
- google-cloud-platform - GCP gcloud deploy - 转义环境变量
- android - 清除以前在 Android 上使用 RecyclerView 的画布
- c# - 如何使标签在 C# windows 窗体中每隔一段时间更改其文本
- android - 在自定义视图上重叠圆形 ImageVIew