Corda 枚举序列化和 PersistentState

Corda enums serialization and PersistentState

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

这个枚举

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

作为整数值存储在数据库中table 0 1个 2个 而且看起来A对应0,B对应1,C对应2.

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

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

我可以在 generateMappedObject 函数中手动实现这个逻辑,但我很好奇什么是正确的方法

参见 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, 

        ...
    }