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

【问题讨论】:

【参考方案1】:

userId 必须采用 EntityId&lt;String&gt;。所以你应该将你的 userId 传递为it[userId] = EntityId(userId, Users)

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

【讨论】:

我也尝试过这样做,但我也想在查询中获取整个参考对象,而不仅仅是 id,因为我必须再次调用以获取该 id 的数据。所以认为映射整个实体应该更容易。但这确实有效。谢谢。

以上是关于Kotlin ktor 暴露 DSL 插入参考的主要内容,如果未能解决你的问题,请参考以下文章

KTOR DSL - 如何嵌套模板?

ViewBinding使用入门

Kmongo (Kotlin Server + Mongo) 的 Ktor 服务器配置问题

通过 Docker 启动 Ktor 应用程序会导致:未配置 Koin 上下文。请使用 startKoin 或 koinApplication DSL

在 Kotlin DSL 中是不是可以完全避免函数名称?

从 ktor 提供 kotlin 多平台 javascript