【问题标题】:Corda enums serialization and PersistentStateCorda 枚举序列化和 PersistentState
【发布时间】:2019-09-12 20:42:22
【问题描述】:

我使用 Corda 4.1 和 kotlin。我的目标是使用 Persistence API 将一些数据存储到 Corda 数据库,然后进行一些查询(我遵循文档 https://docs.corda.net/api-persistence.html )。我在查询枚举类型时遇到了小问题。

这个枚举

@CordaSerializable
enum class MyEnum {    
    A,
    B,
    C
}

以整数值存储在数据库表中 0 1 2 看起来A对应0,B对应1,C对应2。

但我没有看到任何明确的映射。使用什么规则来序列化枚举值?可以用一些注释来改变它们吗?

是否有任何简单的方法可以确保 A 枚举值在数据库中始终保存为 0?是否可以直接保留“A”、“B”、“C”而不是数字?

我可以在 generateMappedObject 函数中执行此逻辑,但我很好奇正确的方法是什么

【问题讨论】:

    标签: corda


    【解决方案1】:

    请参阅此处的 Kotlin 规范:https://kotlinlang.org/docs/reference/enum-classes.html#working-with-enum-constants

    序号是按照它们在枚举中声明的顺序分配的,您可以通过调用MyEnum.A.ordinal以编程方式访问序号

    看起来没有任何简单的方法可以像在 C# 中那样显式分配序数,你可以说 enum { A = 2, B = 1, C = 0 }

    您还可以通过将映射实体中的列定义为:

    来告诉 Hibernate 将映射保留为字符串:
        @Entity
        @Table(name = "table_containing_en_enum"
        class MyClass {
    
            @Column(name = "enum")
            @Enumerated(EnumType.STRING)
            val enum: MyEnum, 
    
            ...
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-22
      • 1970-01-01
      • 2012-10-24
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      相关资源
      最近更新 更多