Hyperledger Composer 查询不起作用

Hyperledger Composer query not working

我正在使用 Hyperledger Composer 及其模型文件的相关部分开发一个应用程序,如下所示。

abstract participant Stakeholder {
 o String name
 o Address address
 o String email optional 
 o String telephone optional
 o Certification certification optional 
 o String[] images optional
 o Company company
 o String username
 o String password      
}

participant Farmer identified by stakeholderId extends Stakeholder {
 o String stakeholderId
 o String description optional  
 --> Farm[] farms
}

我正在尝试使用以下查询通过用户名检索特定农民。

query getUserFromUsername{
description:"get user from username"
statement:
        SELECT org.ucsc.agriblockchain.Stakeholder
          WHERE  (username == _$username) 
}

但它没有按预期工作。这里,由于 Farmer 不是系统中唯一的利益相关者,因此使用了利益相关者抽象参与者。

有什么建议吗?

因为它是一个抽象 类型,"Stakeholder" 注册表没有数据。您需要查询 Farmer 注册表 ... SELECT org.ucsc.agriblockchain.Farmer ...

如果 Farmer 扩展它,将 Stakeholkder 从抽象更改为具体也无济于事,因为 Farmer 仍将是 Farmer 注册表的一部分。

我不确定您到底想从模型中实现什么,但是您可以恢复为具有针对不同利益相关者类型的可选字段的单个参与者类型,否则只需为不同的参与者类型编写单独的查询,并在您的代码中自行整理结果。

更新评论

针对 Farmer 注册表的查询应该有效。

几个提示...

  • 如果您更改了模型或查询,请记住停止并重新启动 REST 服务器,以便它可以发现 更改。
  • 如果您更改了模型,请创建一些新的测试数据。
  • 如果您使用 REST 服务器进行测试,当您输入用户名参数时,请勿在值两边使用引号。

(如果还有问题,请post整个模型,最新的查询,以及你使用的JSON格式的一些示例数据。)

您可以将由 stakeholderId 标识的移动到抽象参与,如下所述。

abstract participant Stakeholder identified by stakeholderId{
 o String stakeholderId
 o String name
 o Address address
 o String email optional 
 o String telephone optional
 o Certification certification optional 
 o String[] images optional
 o Company company
 o String username
 o String password      
}

participant Farmer  extends Stakeholder {
 o String description optional  
 --> Farm[] farms
}

查询getUserFromUsername

query getUserFromUsername{
  description:"get user from username"
  statement:
    SELECT org.ucsc.agriblockchain.Farmer
    WHERE  (username == _$username) 
}