【问题标题】:Kotlin ktor exposed DSL insert with referenceKotlin ktor 暴露 DSL 插入参考
【发布时间】: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 列

【问题讨论】:

    标签: kotlin ktor kotlin-exposed


    【解决方案1】:

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

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

    【讨论】:

    • 我也尝试过这样做,但我也想在查询中获取整个参考对象,而不仅仅是 id,因为我必须再次调用以获取该 id 的数据。所以认为映射整个实体应该更容易。但这确实有效。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多