首页 > 解决方案 > 如果没有其他字段条件,则无法使用带有排序的 VaultQuery

问题描述

我正在使用vaultQueryBy该查询全部Unconsumed state并使用该状态的某些字段进行排序,但它不起作用(结果是完全随机排序)。然后我使用相同vaultQueryBy但添加一些相等的条件,然后结果是完美的排序。

我也尝试使用其他字段(类型 String 和 long),但它也不起作用,除非与其他字段条件一起使用。

这里有一些代码

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

Sort.SortColumn sortCol = new Sort.SortColumn(new SortAttribute.Custom(CustomerSchema.CustomerEntity.class, "changeDate"), Sort.Direction.DESC);
List list = new ArrayList();
list.add(sortCol);
List<StateAndRef<CustomerState>> list = rpcOps().vaultQueryBy(queryCriteria, pageSpecification, new Sort(sortList), CustomerState.class).getStates();

它不起作用然后我在 vaultQueryBy 之前添加了这个条件

QueryCriteria baseCriteria = new QueryCriteria.VaultCustomQueryCriteria(Builder.notNull(getField("linearId", CustomerSchemaV01.CustomerEntity.class)));
queryCriteria = queryCriteria.and(baseCriteria);

它工作正常,得到正确排序的结果。

我不太确定这是 Corda 的意图还是只是一些错误,但我认为它应该能够在不使用任何现场条件的情况下进行订购。

标签: corda

解决方案


这可能是预期的行为,因为排序条件仅适用于自定义查询,因此您需要提供自定义查询以将其添加到整体查询中。


推荐阅读