如果要从Node Vault查询数据,我正在与Corda合作。从根本上讲,我使用了Schema为该查询添加了一些条件。例如:
val quantityIndex = SchemaV1.Persistent::value.greaterThanOrEqual(4)
那么,有没有在不使用Schema的情况下在Vault中查询状态的问题?因为我相信,如果我能够使用State类而不是Schema类,则可以使用更好的条件规则查询State。
答案 0 :(得分:1)
从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."));
如果状态很多,则必须分别过滤每个保管库页面,然后整理结果。