有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Corda:如何将AndComposition与Vault CustomQueryCriteria一起使用

我使用RPC客户端(JavaSpringBoot应用程序)连接到Corda4.6节点

我要使用以下查询条件运行自定义vault查询:

QueryCriteria stateStatusCriteria = new VaultQueryCriteria(StateStatus.ALL);
QueryCriteria myFieldCriteria = new VaultCustomQueryCriteria(
  Builder.equal(getField("myField", PersistentMyState.class), myValue)
);
return stateStatusCriteria.and(myFieldCriteria);
// Also tried: return myFieldCriteria.and(stateStatusCriteria);

这与Corda documentation中的示例非常相似

然而,我只是检索UNCONSUMED状态。这里会出什么问题

以下代码段正在工作,但我需要一个AndComposition,因为我想稍后添加更多自定义条件:

QueryCriteria myFieldCriteria = new VaultCustomQueryCriteria(
  Builder.equal(getField("myField", PersistentMyState.class), myValue), 
  StateStatus.ALL
);
return myFieldCriteria ;

此外,任何关于如何在Corda中激活Hibernate日志的提示都将不胜感激。我在Kubernetes集群和PostgreSQL数据库中运行的corda/corda-zulu-java1.8-4.6:RELEASE映像中使用自定义CorDapps


共 (1) 个答案

  1. # 1 楼答案

    **更新**

    默认情况下VaultCustomQueryCriteriaits constructor中设置stateStatus = UNCONSUMED

        data class VaultCustomQueryCriteria<L : StatePersistable>(
            val expression: CriteriaExpression<L, Boolean>,
            override val status: Vault.StateStatus = Vault.StateStatus.UNCONSUMED,
            override val contractStateTypes: Set<Class<out ContractState>>? = null,
            override val relevancyStatus: Vault.RelevancyStatus = Vault.RelevancyStatus.ALL)
    

    因此,如果您没有传递StateStatus,查询将始终返回UNCONSUMED状态,并且如果您还有CONSUMED状态,Hibernate的and()谓词将不起作用。 github上还有一个类似的问题。 因此,基本上您的第一个代码片段应该如下所示:

    QueryCriteria stateStatusCriteria = new VaultQueryCriteria(StateStatus.ALL);
    QueryCriteria myFieldCriteria = new VaultCustomQueryCriteria(
    Builder.equal(getField("myField", PersistentMyState.class), myValue), StateStatus.ALL);
    return stateStatusCriteria.and(myFieldCriteria);
    

    要激活Hibernate logger,您必须更新cordapp中的log4j.xml文件以添加Hibernate配置,可能类似以下内容:

    <Configuration monitorInterval="60">
    <Properties>
        <Property name="log-path">PropertiesConfiguration</Property>
    </Properties>
    <Appenders>
        <Console name="Console-Appender" target="SYSTEM_OUT">
            <PatternLayout>
                <pattern>
                    [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
                </pattern>>
            </PatternLayout>
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="org.hibernate.SQL" level="debug" additivity="false">
            <AppenderRef ref="Console-Appender"/>
        </Logger>
        <Logger name="org.hibernate.type.descriptor.sql" level="trace" additivity="false">
            <AppenderRef ref="Console-Appender"/>
        </Logger>
        <Root level="info">
            <AppenderRef ref="Console-Appender"/>
        </Root>
    </Loggers>