我正在使用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抽象参与者。
有什么建议吗?
答案 0 :(得分:1)
因为它是抽象类型,所以没有“利益相关者”注册表的数据。您需要查询Farmer注册表... SELECT org.ucsc.agriblockchain.Farmer ...
如果Stentholkder扩展了Stakeholkder的名称,那么如果Farmer对其进行扩展,也将无济于事,因为Farmer仍将是Farmer注册表的一部分。
我不确定您要从模型中确切获得什么,但是您可以使用不同的涉众类型的可选字段恢复为单个参与者类型,否则只需为不同的参与者类型编写单独的查询,然后整理结果自己在代码中。
更新后的评论
针对Farmer注册表的查询应该可以正常工作。
提示对...
(如果仍有问题,请以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)
}