我正在使用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的意图还是只是一些错误,但是我认为它应该能够在不使用任何现场条件的情况下订购。
答案 0 :(得分:0)
这可能是预期的行为,因为排序标准仅适用于自定义查询,因此,您需要提供一个自定义查询才能将其添加到整体查询中。