Kotlin Ktor裸露的DSL插件带有参考

时间:2019-07-30 23:35:56

标签: kotlin ktor kotlin-exposed

我正在使用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>但找到了String。关于如何插入参考的任何帮助。这可能是因为我将String作为带有UUID的ID列

1 个答案:

答案 0 :(得分:0)

userId必须带有EntityId<String>。因此,您应该将用户ID传递为it[userId] = EntityId(userId, Users)

为避免这种情况,我使用普通的Table而不是IntIdTable并手动创建主键。这样,我可以直接传递值,而无需将其包装在EntityId<>中。