【问题标题】:Corda 4.1 : Cross-reference between MappedSchemasCorda 4.1:MappedSchemas 之间的交叉引用
【发布时间】:2019-12-09 01:47:10
【问题描述】:

当我运行节点时,控制台会打印出这种警告:MappedSchemas DealSchemaV1CompanySchemaV1 之间的交叉引用。 MappedSchema DealSchemaV1 entity PersistentDealState field sender 是在另一个 MappedSchema CompanySchemaV1 中定义的 PersistentCompany 类型。这可能会在演变 MappedSchema 或迁移其数据时导致问题,请确保 JPA 实体在相同的封闭 MappedSchema 中定义。

如果我遵循警告建议并将所有实体放在一个 SchemaV1 中,那么一个架构中将会有数百个实体,这很糟糕。

解决此警告的最佳做法是什么?

object CompanySchema

object CompanySchemaV1 : MappedSchema(
        schemaFamily = CompanySchema.javaClass,
        version = 1,
        mappedTypes = listOf(...)
) {
    @Embeddable
    class PersistentCompany(   
        ...
    )   
    ...
}
object DealSchema

object DealSchemaV1 : MappedSchema(
        schemaFamily = DealSchema.javaClass,
        version = 1,
        mappedTypes = listOf(...)
) {
    @Entity
    @Table(...)
    class PersistentDealState(

            @Embedded
            var sender: CompanySchemaV1.PersistentCompany?,

            ...
    )
    ...
}

【问题讨论】:

    标签: hibernate corda


    【解决方案1】:

    在同一架构中添加“class PersistentCompany”和“class PersistentDealState”并相互交叉引用。

    以下是可用于重构代码的参考代码 - (详情见网址-https://github.com/corda/corda/blob/master/docs/source/api-persistence.rst

    @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()
    

    希望它能解决您的问题

    【讨论】:

      猜你喜欢
      • 2015-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-18
      • 2013-01-16
      • 1970-01-01
      相关资源
      最近更新 更多