首页 > 解决方案 > Kotlin ktor 暴露 DSL 插入参考

问题描述

我正在开发一个带有 ktor 应用程序的 Kotlin,并且我使用暴露为 ORM。我有一个引用另一个表的表。这种关系是多对一的。前任:

object Users : IdTable<String>() {
   override val id: Column<EntityID<String>> = varchar("user_id", 64).entityId().primaryKey()
   val email = varchar("email", 128).uniqueIndex()
   val firstName = varchar("first_name", 64)
   val lastName = varchar("last_name", 64)
}

& 用户考勤表为 -

object UserAttendances : IntIdTable() {
   val userId = reference("user_id", Users).index()
   val checkInTime = date("check_in")
   val checkOutTime = date("check_out")
}

现在,当我尝试插入出勤表时,我不确定如何将插入映射到用户。我尝试了以下 -

StaffAttendances.insert {
    it[date] = DateTime.now()
    it[checkInTime] = DateTime.now()
    it[userId] = userId
}

这给出了所需类型是EntityId<String>but found的编译错误String。关于如何插入参考的任何帮助。这可能是因为我将字符串作为带有 UUID 的 ID 列

标签: kotlinktorkotlin-exposed

解决方案


userId必须EntityId<String>采取. 所以你应该将你的 userId 作为it[userId] = EntityId(userId, Users).

为了避免这种情况,我使用plainTable代替IntIdTable并手动创建我的主键。这样我可以直接传递值而不用将它包装在EntityId<>.


推荐阅读