如果没有其他字段条件,则无法将VaultQuery与Sorting一起使用

时间:2019-04-25 07:52:26

标签: corda

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

1 个答案:

答案 0 :(得分:0)

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