【问题标题】:Corda persistent APICorda 持久化 API
【发布时间】:2019-09-10 12:34:51
【问题描述】:

我正在阅读有关 Corda Persistence https://docs.corda.net/api-persistence.html 的文档,我有几点不清楚。

  1. 数据与保管库存储并行保存,我说得对吗? IE。保管库存储未更改,并且正在添加新表来存储数据。

  2. 当我们使用 cordaRPCClient.vaultQueryBy 方法它自己会理解使用什么:保管库或保留在自定义数据库表中的数据?

  3. 例如,当表中只有部分数据可用时,如何进行选择?有什么方法可以明确告诉 Corda 应该使用持久化数据进行查询?

【问题讨论】:

    标签: corda


    【解决方案1】:

    以下是您的疑问的答案:

    1. 是的,您是对的,新表是在您的 QueryableState 对应的保管库中创建的。所有需要持久化的状态都应该实现 QueryableState 接口。

    2. 您的状态也以正常的二进制格式存储,因此cordaRPCClient.vaultQueryBy 将始终查询库中的ContractState,而不是PersistentState。但是,您可以使用 jdbc session/jpa 查询自定义数据库表。

    3. 需要持久化状态的哪一部分是根据您的要求进行的调用。可以使用自定义 JDBC 查询/JPA 查询持久数据。 VaultQuery API 始终在 ContractState 中工作。

    【讨论】:

    • 非常感谢阿舒托什!这很有帮助!您是否有机会知道是否有任何文档确认 cordaRPCClient.vaultQueryBy 始终查询 ContractState 而不是 PersistedState?
    • 所有 vaulyQuery 方法变体最终调用 _queryBy 方法。它需要一个ContractState类型的参数,代表被查询的状态
    • 我检查了您提供的链接,但我没有看到在执行 vaultQueryBy 方法时没有使用持久性的明确确认。相反,我看到以下文字:The Vault Query API leverages the rich semantics of the underlying JPA Hibernate based Persistence framework adopted by Corda. 所以,我很困惑。
    • 我的意思是使用 vaultQuery,您需要指定要查询的状态,它始终是 ContractState 而不是 PersistState(可查询状态的持久表示,即 JPA 实体)。话虽如此,如果您配置了 PersistentState,vaultQuery 可以利用它来根据 PersistentState 的字段过滤结果,但是返回的结果始终是 ContractState。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多