Hyperledger Composer查询不起作用

时间:2018-08-29 06:25:02

标签: hyperledger hyperledger-composer

我正在使用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抽象参与者。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

因为它是抽象类型,所以没有“利益相关者”注册表的数据。您需要查询Farmer注册表... SELECT org.ucsc.agriblockchain.Farmer ...

如果Stentholkder扩展了Stakeholkder的名称,那么如果Farmer对其进行扩展,也将无济于事,因为Farmer仍将是Farmer注册表的一部分。

我不确定您要从模型中确切获得什么,但是您可以使用不同的涉众类型的可选字段恢复为单个参与者类型,否则只需为不同的参与者类型编写单独的查询,然后整理结果自己在代码中。

更新后的评论

针对Farmer注册表的查询应该可以正常工作。

提示对...

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

(如果仍有问题,请以JSON格式发布整个模型,最新查询以及一些示例数据。)

答案 1 :(得分:1)

您可以按如下所述将由ownerholderId标识的身份移至抽象参与。

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) 
}