微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么当表新创建为 StringIdTable 时,Exposed 会抱怨已经存在的 id 列?

如何解决为什么当表新创建为 StringIdTable 时,Exposed 会抱怨已经存在的 id 列?

我开始尝试使用 JetBrains Exposed 0.28.1 和 Postgres 13。 当我尝试创建第一个表时,我得到一个 PsqlException:

ERROR: column "id" of relation "xxx" already exists. Statement(s): ALTER TABLE <schema>.xxx ADD id VARCHAR(10) PRIMARY KEY

这是表创建代码

open class StringIdTable(
    schema: String,name: String,columnName: String = "id",columnLength: Int = 10,) : IdTable<String>("$schema.$name") {
    override val id: Column<EntityID<String>> =
        varchar(columnName,columnLength).entityId()
    override val primaryKey by lazy { super.primaryKey ?: PrimaryKey(id) }
}

const val DB_NAME = "db"
const val SCHEMA_NAME = "schema"
val SCHEMA = Schema(name = SCHEMA_NAME,authorization = "postgres")

object MyTable : StringIdTable(SCHEMA_NAME,"xxx") {
//object MyTable : Table("xxx") {
//    val id = varchar(name = "id",length = 10)
    val label = varchar(name = "title",length = 255)
    val order = text("order")
}

使用 Exposed 的方法调用创建:SchemaUtils.createMissingTablesAndColumns(MyTable)

如果我使用注释行将表定义为“简单”Table 而不是 StringIdTable,我也不例外。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。