在Corda持久性中,如何编写一个模式来将嵌套对象的数组映射为父项中的子项?
我正在查看此文档https://docs.corda.net/api-persistence.html并设法创建映射到数据库中列的状态对象的简单非嵌套属性。但是,对于作为子项的列表对象,它仍然无效。
当前代码在下面读到,它正在抛出错误。什么是output_index和transaction_id列?
org.hibernate.MappingException:外键(child_table [parent])必须具有相同的内容 列数作为引用的主键(parent_table [output_index,TRANSACTION_ID])
{{1}}此处不包括Corda状态的
generateMappedObject函数,因为它非常简单,我不认为该部分导致问题。
请注意,上面的代码是实际代码的简化版本,尚未经过测试。
答案 0 :(得分:0)
您的代码段建议您针对同一单个Corda State具有两个模式ChildSchemaV1和ParentSchemaV1(好奇地知道如何在状态中映射这些模式)。建议将单个模式用于特定状态。
也在孩子到父母的关系映射中
@ManyToOne
var parent: ParentSchemaV1.PersistentParent
请使用下面的代码段映射到州,因为您的联接列必须是output_index,transaction_id,因为这些是持久状态的主键
@ManyToOne
var cordaStateVar: CordaSate
在官方Corda网站上检查下面的完整代码。
@CordaSerializable
object SchemaV1 : MappedSchema(schemaFamily = Schema::class.java, version = 1,
mappedTypes = listOf(PersistentParentToken::class.java,
PersistentChildToken::class.java)) {
@Entity
@Table(name = "parent_data")
class PersistentParentToken(
@Column(name = "owner")
var owner: String,
@Column(name = "issuer")
var issuer: String,
@Column(name = "amount")
var currency: Int,
@Column(name = "linear_id")
var linear_id: UUID,
@JoinColumns(JoinColumn(name = "transaction_id", referencedColumnName = "transaction_id"), JoinColumn(name = "output_index", referencedColumnName = "output_index"))
var listOfPersistentChildTokens: MutableList<PersistentChildToken>
) : PersistentState()
@Entity
@CordaSerializable
@Table(name = "child_data")
class PersistentChildToken(
@Id
var Id: UUID = UUID.randomUUID(),
@Column(name = "owner")
var owner: String,
@Column(name = "issuer")
var issuer: String,
@Column(name = "amount")
var currency: Int,
@Column(name = "linear_id")
var linear_id: UUID,
@ManyToOne(targetEntity = PersistentParentToken::class)
var persistentParentToken: TokenState
) : PersistentState()