Corda 是否仍有其他方法可以在不使用架构的情况下查询Vault中的状态?

Corda 是否仍有其他方法可以在不使用架构的情况下查询Vault中的状态?,corda,Corda,我正在与Corda合作,以便从节点的Vault中查询数据。基本上,我使用模式为这个查询添加了一些条件。例如: val quantityIndex=SchemaV1.Persistent::value.greaterThanOrEqual(4) 那么,在不使用模式的情况下,是否仍可以查询Vault中的状态?因为我相信,如果我能够使用State类而不是Schema类,我可以使用更好的条件规则查询State。从Corda 3开始,没有办法做到这一点。这是因为除了作为模式的一部分提取的属性之外,状态仅存

我正在与Corda合作,以便从节点的Vault中查询数据。基本上,我使用模式为这个查询添加了一些条件。例如:

val quantityIndex=SchemaV1.Persistent::value.greaterThanOrEqual(4)


那么,在不使用模式的情况下,是否仍可以查询Vault中的状态?因为我相信,如果我能够使用State类而不是Schema类,我可以使用更好的条件规则查询State。

从Corda 3开始,没有办法做到这一点。这是因为除了作为模式的一部分提取的属性之外,状态仅存储为Java blob

您必须提取状态,然后在内存中过滤它们:

List<StateAndRef<ArtState>> artStateAndRefs = getServiceHub().getVaultService().queryBy(ArtState.class).getStates();

StateAndRef<ArtState> inputArtStateAndRef = artStateAndRefs
    .stream().filter(artStateAndRef -> {
        ArtState artState = artStateAndRef.getState().getData();
        return artState.getArtist().equals(artist) && artState.getTitle().equals(title);
    })
    .findAny()
    .orElseThrow(() -> new IllegalArgumentException("The piece of art was not found."));
列出artStateAndRefs=getServiceHub().getVaultService().queryBy(ArtState.class).getStates();
StateAndRef inputArtStateAndRef=artStateAndRefs
.stream().filter(artStateAndRef->{
ArtState ArtState=artStateAndRef.getState().getData();
返回artState.getArtist().equals(艺术家)和&artState.getTitle().equals(标题);
})
.findAny()
.orElseThrow(()->新的IllegalArgumentException(“未找到艺术品”);

如果存在大量状态,则必须逐个筛选每个vault页面,然后整理结果。

感谢您的回答,它也会运行!那么,在使用模式和不使用模式之间,什么是更快的解决方案呢?使用模式要快得多,因为它执行数据库查询,而不是遍历内存中的每个对象。感谢您的帮助!