Hyperledger Composer:.cto文件中关系定义方法咨询
理清Hyperledger Composer .cto文件中的关系定义
嘿,我来帮你搞懂这段.cto代码里的关系定义逻辑,先看你贴的代码片段:
participant Resident identified by residentID { o String residentID o String firstName o String lastName --> Coins coins --> Cash cash --> Energy energy } asset Coins identified by coinsID { o String coinsID o Double value // 其他字段... }
核心关系语法拆解
你看到的--> Coins coins这种写法,是Hyperledger Composer里定义单向关系的标准语法,咱们拆成三部分看:
-->:这个符号专门用来声明关系,意思是当前的参与者/资产(这里是Resident参与者)持有指向另一个对象的引用。Coins:这是关系指向的目标类型,必须是已经在.cto文件里定义过的资产(Asset)或者参与者(Participant),比如你这里的Coins就是一个Asset类型。coins:这是关系字段的名称,在Resident的实例数据里,这个字段会存储对应Coins资产的唯一标识符(也就是Coins里的coinsID),通过这个ID就能关联到具体的Coins资产实例。
几个关键细节补充
关系的基数
默认是一对一关系,也就是一个Resident只能关联一个Coins实例。如果要实现一对多(比如一个居民有多个Coins资产),只需要把字段改成数组形式:--> Coins[] coins单向vs双向关系
你现在看到的是单向关系:Resident知道自己关联的Coins,但Coins不知道关联的是哪个Resident。如果需要双向关联,得在Coins里也加对应的关系字段,并用@Inverse注解绑定反向关系:asset Coins identified by coinsID { o String coinsID o Double value --> Resident owner @Inverse(resident.coins) }这样两边的关系就会自动同步,修改一边的关联,另一边也会跟着更新。
关系的强制性
默认关系是可选的(可以为空),如果要求Resident必须关联一个Coins,就在字段前加mandatory:o --> Coins coins mandatory
举个实际场景的例子:当你创建一个Resident实例时,需要传入一个已存在的coinsID,这个Resident就和对应的Coins资产绑定了。之后在交易逻辑里,你可以直接通过resident.coins获取到该居民的Coins资产数据,不用手动去查询。
内容的提问来源于stack exchange,提问作者user1274878
相关产品推荐
相关产品推荐

