Hyperledger Composer关联查询问题:按借款人查发票返回空结果
我来帮你解决这个问题,你遇到的是Hyperledger Composer中关联关系查询的常见问题,下面是具体的分析和解决方案:
问题根源
你的查询语句和REST调用逻辑上方向是对的,但返回空数组通常是因为关联资源的匹配细节没处理到位,比如资源引用格式、查询语句的匹配逻辑或者参数对应关系。
解决方案1:通过完整资源引用匹配关联参与者
这个方案直接匹配关联的参与者资源引用,和你原本的思路一致,只需确保细节正确:
修正后的查询语句
query QInvoiceByBorrower { description: "Select all invoices for a specific borrower" statement: SELECT org.n.blockchaindemo.Invoice WHERE (borrower == _$borrower) }
调用注意事项
- 确保REST请求的参数值是完整的资源引用格式:
resource:org.n.blockchaindemo.User#1381991(命名空间、参与者类型、标识符必须和你CTO文件中的定义完全一致,大小写敏感) - 参数名
borrower必须和查询中的占位符_$borrower完全对应
解决方案2:通过参与者标识符匹配(更简洁)
如果不想每次都传完整的资源引用,可以直接匹配参与者的标识符,调用更方便:
优化后的查询语句
query QInvoiceByBorrower { description: "Select all invoices by borrower identifier" statement: SELECT org.n.blockchaindemo.Invoice WHERE (borrower.identifier == _$borrowerId) }
调用方式
只需传入参与者的标识符即可,无需完整资源引用:http://10.10.4.244:3000/api/queries/QInvoiceByBorrower?borrowerId=1381991
关键验证步骤
- 确认数据存在:打开Hyperledger Composer Playground,检查目标Invoice资产的
borrower字段是否确实指向resource:org.n.blockchaindemo.User#1381991 - 检查命名空间和类型:确保查询中的
org.n.blockchaindemo.Invoice、org.n.blockchaindemo.User和你CTO文件中的定义完全一致(大小写、命名空间都不能出错) - 参数格式校验:如果用方案1,必须完整传入
resource:命名空间.类型#标识符格式的参数,不能省略前缀或命名空间
内容的提问来源于stack exchange,提问作者AshT
相关产品推荐
相关产品推荐

