我正在尝试创建一个抽象类
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
我发现从
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)
}