【问题标题】:Corda Upgradation to V4.6Corda 升级到 V4.6
【发布时间】:2021-06-07 00:40:00
【问题描述】:

我正在实施一个用例,将 cordapp 从 V4.5 操作系统升级到 V4.6 操作系统。但是当我在 PostgreSQL 上使用带有自定义模式的 Corda V4.6 时。

我遇到了自定义保险柜查询的问题,下面的代码出现错误。

示例代码:

FieldInfo attribute1 = null;
            try {
                attribute1 = getField("attributeInCordaSchema", AttributeSchema.PersistentAttribute.class);
            }catch (NoSuchFieldException e) {
                e.printStackTrace();
            }
            final String attributeFromService = (String) inputMapObj.get("attribute");
            QueryCriteria generalCriteria = new QueryCriteria.VaultQueryCriteria(Vault.StateStatus.ALL);
            QueryCriteria attribute1Criteria = new QueryCriteria.VaultCustomQueryCriteria(Builder.equal(attribute1, attributeFromService));
            QueryCriteria criteria = generalCriteria.and(attribute1Criteria);
            Vault.Page<OurState> results = getServiceHub().getVaultService().queryBy(OurState.class, criteria);
            List<StateAndRef<OurState>> matchingStates = results.getStates();

错误:

net.corda.core.node.services.VaultQueryException: An error occurred while attempting to query the vault: org.hibernate.exception.SQLGrammarException: could not extract ResultSet at net.corda.node.services.vault.NodeVaultService._queryBy(NodeVaultService.kt:646) ~[corda-node-4.6.jar:?]
    at net.corda.core.node.services.VaultService$DefaultImpls.queryBy(VaultService.kt:436) ~[corda-core-4.6.jar:?]
    at net.corda.node.services.api.VaultServiceInternal$DefaultImpls.queryBy(VaultServiceInternal.kt) ~[corda-node-4.6.jar:?]
    at net.corda.node.services.vault.NodeVaultService.queryBy(NodeVaultService.kt:54) ~[corda-node-4.6.jar:?]

自定义查询保险库的方式是否发生了变化?

【问题讨论】:

    标签: java corda


    【解决方案1】:

    虽然我手头没有您的确切状态,但我可以尝试举一个 4.6 的示例。

    据我所知,它没有改变,这是我使用义务 cordapp 中的 corda 4.6 进行保险库查询的示例。

    我个人喜欢按类名查询,因为这样对我来说更简单。

                List<UUID> listOfLinearIds = Arrays.asList(stateLinearId.getId());
                QueryCriteria queryCriteria = new QueryCriteria.LinearStateQueryCriteria(null, listOfLinearIds);
                Vault.Page results = getServiceHub().getVaultService().queryBy(IOUState.class, queryCriteria);
                StateAndRef inputStateAndRefToSettle = (StateAndRef) results.getStates().get(0);
                IOUState inputStateToSettle = (IOUState) ((StateAndRef) results.getStates().get(0)).getState().getData();
    

    来源cordapp:https://github.com/corda/samples-java/blob/master/Advanced/obligation-cordapp/workflows/src/main/java/net/corda/samples/obligation/flows/IOUSettleFlow.java#L57-L61

    还值得一提的是,这里的文档中有很多最新 corda 的代码示例:https://docs.corda.net/docs/corda-os/4.7/api-vault-query.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-27
      • 2020-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2018-12-26
      相关资源
      最近更新 更多