如何通过Kotlin Exposed ORM使用Postgresql枚举类型?

Kam*_*yar 4 postgresql orm enums kotlin kotlin-exposed

我已经将某些Postgresql类型添加到Exposed作为扩展。它有两个就绪类型,分别名为enumerationenumerationByName。我测试了这两者,但都没有成功将Postgre枚举类型映射到Kotlin枚举类。在读写中都会引发错误

enum class TicketStatus(val status: String) {
    Open("open"),
    Close("close"),
    InProgress("in_progress")
}

class Ticket(id: EntityID<UUID>) : Entity<UUID>(id) {
    companion object : EntityClass<UUID, Ticket>(Tickets)

    var geom by Tickets.geom
    var description by Tickets.description
    var status by Tickets.status
    var createdAt by Tickets.createdAt
    var updatedAt by Tickets.updatedAt
    var owner by Tickets.owner
}
Run Code Online (Sandbox Code Playgroud)

阅读时:

java.lang.IllegalStateException: open is not valid for enum TicketStatus
Run Code Online (Sandbox Code Playgroud)

Tap*_*pac 5

您应该声明状态列,如下所示:

object Tickets: Table() {
   val status = enumeration("status", TicketStatus::class.java) // will create integer column
   val status = enumerationByName("status", TicketStatus::class.java) // will create varchar with TicketStatus names
}
Run Code Online (Sandbox Code Playgroud)

  • @Tapac似乎在较新版本的Expose中,您应该只使用 `TicketStatus::class` ,至少对我来说添加 `.java` 不起作用。 (3认同)