如果没有其他字段条件,则将 VaultQuery 与排序一起使用将不起作用



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

我也尝试使用其他字段(字符串和长(,但它也不起作用,除非与其他字段条件一起使用。

这里有一些代码

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 的意图还是只是一些错误,但我认为它应该能够在不使用任何现场条件的情况下订购。

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

最新更新