gpt4 book ai didi

sql - Kotlin 公开 - 没有标识列的表的实体

转载 作者:行者123 更新时间:2023-11-29 11:42:18 38 4
gpt4 key购买 nike

我在 Kotlin 公开库中可以找到的所有 Material 都假定该表具有一个主标识列,因此在大多数示例中显示的实体继承了 IntEntity 抽象类。例如:

class UserLocation(id: EntityID<Int>) : IntEntity(id) {
companion object : IntEntityClass<UserLocation>(UserLocations)

var userId by UserLocations.userId
var user by User referencedOn UserLocations.user
var recordedAt by UserLocations.recordedAt
var insertedAt by UserLocations.insertedAt
var point by UserLocations.point

这对应于这个表定义:

object UserLocations : IntIdTable("user_locations") {

val userId = integer("user_id")
val user = reference("user_id", Users)
val recordedAt = datetime("recorded_at").nullable()
val insertedAt = datetime("inserted_at")
val point = point("point")
}

问题是,我的表实际上没有标识列。我知道没有主键的表的所有负面影响,但不幸的是我只能读取该表。我无法获得对此表的写入权限以添加主键。

在暴露库的 wiki 中,有一点提到对象表定义可以继承 Table 而不是 IntIdTable,但是这需要实体继承一些东西不同,我无法完全找到实体应该继承什么而不是 IntEntity

我的问题:当表没有 id 列时,我的实体应该继承什么(而不是 IntEntity)。

最佳答案

Exposed DAO 需要一些身份来从表中获取和存储实体。它不需要是主列或自动递增列,但在这种情况下,您必须确保该列中的值是唯一的。

例如,您可以将实体映射到具有字符串 ID 的表:

object FooTable : IdTable<String>() {
val myIdColumn = varchar("my_id_column", 50).uniqueIndex()
override val id: Column<EntityID<String>> = myIdColumn.entityId()
}

class FooEntity(id: String) : Entity<String>(id) {
companion object : EntityClass<String, FooEntity>(FooTable)
}

关于sql - Kotlin 公开 - 没有标识列的表的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57633755/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com