Corda持久性API

Corda持久性API,corda,Corda,我正在阅读有关Corda Persistence的文档,我有几点不清楚 数据的持久化与vault存储并行,对吗。即,不会更改vault存储,也会添加新表以存储数据 当我们使用 cordaRPCClient.vaultQueryBymethod它自己是否知道该使用什么:vault或保存在自定义数据库表中的数据 例如,当表格中只有部分数据可用时,如何进行选择?有没有办法明确地告诉Corda应该将持久化数据用于查询 以下是您的问题的答案: 是的,您是正确的,将在vault中创建与您的Queryable

我正在阅读有关Corda Persistence的文档,我有几点不清楚

  • 数据的持久化与vault存储并行,对吗。即,不会更改vault存储,也会添加新表以存储数据

  • 当我们使用
    cordaRPCClient.vaultQueryBy
    method它自己是否知道该使用什么:vault或保存在自定义数据库表中的数据

  • 例如,当表格中只有部分数据可用时,如何进行选择?有没有办法明确地告诉Corda应该将持久化数据用于查询

  • 以下是您的问题的答案:

  • 是的,您是正确的,将在vault中创建与您的QueryableState对应的新表。所有需要持久化的状态都应该实现QueryableState接口

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

  • 需要持久化状态的哪一部分取决于您的需求。可以使用自定义JDBC查询/JPA查询持久化数据。Vault Query API始终在
    ContractState
    中工作


  • 以下是您的问题的答案:

  • 是的,您是正确的,将在vault中创建与您的QueryableState对应的新表。所有需要持久化的状态都应该实现QueryableState接口

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

  • 需要持久化状态的哪一部分取决于您的需求。可以使用自定义JDBC查询/JPA查询持久化数据。Vault Query API始终在
    ContractState
    中工作


  • 非常感谢你,阿舒托什!这很有帮助!您是否知道是否有任何文档证实cordaRPCClient.vaultQueryBy始终查询ContractState而不是PersistedState?所有vaulyQuery方法变体最终都会调用_queryBy方法。它需要一个ContractState类型的参数,该参数表示正在查询的状态。我检查了您提供的链接,但我没有看到在执行vaultQueryBy方法时未使用持久性的明确确认。相反,我看到了以下文本:
    Vault Query API利用了Corda采用的基于JPA Hibernate的持久性框架的丰富语义。
    因此,我感到困惑。我的意思是,对于Vault Query,您需要指定要查询的状态,它始终是ContractState而不是PersistState(可查询状态的持久表示,即JPA实体)。话虽如此,如果您配置了PersistentState,Vault Query可以利用它来根据PersistentState字段筛选结果,但是返回的结果始终是ContractState。非常感谢Ashutosh!这非常有用!您是否知道有任何文档证实了这一事实t cordaRPCClient.vaultQueryBy always query ContractState和not PersistedState?所有vaulyQuery方法变体最终都会调用_queryBy方法。它需要一个ContractState类型的参数,它表示正在查询的状态。我检查了您提供的链接,但我没有看到在执行时没有使用持久性的明确确认ng vaultQueryBy方法。相反,我看到了以下文本:
    Vault查询API利用了Corda采用的基于JPA Hibernate的持久化框架的丰富语义。
    因此,我感到困惑。我的意思是,对于vaultQuery,您需要指定要查询的状态,它始终是ContractState而不是Persist状态(可查询状态(即JPA实体)的持久表示形式)。如上所述,如果您配置了PersistentState,Vault Query可以利用它根据PersistentState字段过滤结果,但是返回的结果始终是ContractState。