我正在使用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列

最佳答案

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

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

关于kotlin - Kotlin Ktor裸露的DSL插件带有引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57281338/

10-17 01:49