Kotlin ktor 暴露 DSL 插入参考
Posted
技术标签:
【中文标题】Kotlin ktor 暴露 DSL 插入参考【英文标题】:Kotlin ktor exposed DSL insert with reference 【发布时间】:2019-12-08 10:00:32 【问题描述】:我正在开发一个带有 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】:userId
必须采用 EntityId<String>
。所以你应该将你的 userId 传递为it[userId] = EntityId(userId, Users)
。
为了避免这种情况,我使用普通的Table
而不是IntIdTable
并手动创建我的主键。这样我就可以直接传递值,而无需将其包装在 EntityId<>
中。
【讨论】:
我也尝试过这样做,但我也想在查询中获取整个参考对象,而不仅仅是 id,因为我必须再次调用以获取该 id 的数据。所以认为映射整个实体应该更容易。但这确实有效。谢谢。以上是关于Kotlin ktor 暴露 DSL 插入参考的主要内容,如果未能解决你的问题,请参考以下文章
Kmongo (Kotlin Server + Mongo) 的 Ktor 服务器配置问题
通过 Docker 启动 Ktor 应用程序会导致:未配置 Koin 上下文。请使用 startKoin 或 koinApplication DSL