Kotlin 中扩展 IntIdTable 暴露的 PSQL 不继承主键

问题描述 投票:0回答:1

问题总结

我正在尝试创建一个抽象类

UserTable
,它继承 Kotlin Exposed 框架的
IntIdTable
,如下所示:

abstract class UserTable : IntIdTable() {
    val userId = integer("userId").references(SystemUsers.id)
    val created = timestamp("created").defaultExpression(CurrentTimestamp())
    val updated = timestamp("updated").defaultExpression(CurrentTimestamp())
}

我的想法是,我可以使用包含特定于系统用户的行的表来扩展此

UserTable
。比如桌子之类的东西
ContantInformation
:

object ContactInformation: UserTable() {
  val name = varchar("name", length = 63)
  val email = varchar("email", length = 127)
}

运行应用程序时,使用整数 ID 创建表,但表

ContactInformation
中缺少主键以及唯一约束。这导致当我尝试引用另一个表中的联系信息时出现问题,例如:

object Users : IntIdTable() {
    val contactInformationId = integer("contactInformationId").references(ContactInformation.id)
}

我收到错误

ERROR: there is no unique constraint matching given keys for referenced table "ContactInformation"

IntIdTable
中的主键也是最终的,所以我无法覆盖它。有没有办法继承主键,或者另一种方式向表添加唯一修饰符
ContactInformation

版本

kotlin=2.0.0

postgresql=42.7.3

exposed=0.41.1

kotlin primary-key psql kotlin-exposed
1个回答
0
投票

我发现从

IntIdTable
重写为
UUIDTable
解决了这个问题。但是,我必须删除并重新创建所有表。

abstract class UserTable : UUIDTable() {
    val userId = integer("userId").references(SystemUsers.id)
    val created = timestamp("created").defaultExpression(CurrentTimestamp())
    val updated = timestamp("updated").defaultExpression(CurrentTimestamp())
}
object Users : IntIdTable() {
    val contactInformationId = uuid("contactInformationId").references(ContactInformation.id)
}
© www.soinside.com 2019 - 2024. All rights reserved.