Jetbrains 的 Exposed 库的字符串主键 - Kotlin
String primary key with Jetbrains' Exposed library - Kotlin
我在弄清楚如何使用字符串主键编写 table 以及 table 的实体时遇到问题。无论我将 IdTable<String>
作为 Table 类型还是尝试将其与普通的 Table
一起使用都没有用。
如果您确实需要将 String 作为主键,请执行以下操作:
/*
* Base class for entities with string id
*/
abstract class StringEntityClass<out E: Entity<String>>(table: IdTable<String>, entityType: Class<E>? = null) : EntityClass<String, E>(table, entityType)
/*
* Base class for table objects with string id
*/
open class StringIdTable(name: String = "", columnName: String = "id", columnLength: Int = 10) : IdTable<String>(name) {
override val id: Column<EntityID<String>> = varchar(columnName, columnLength).entityId()
override val primaryKey by lazy { super.primaryKey ?: PrimaryKey(id) }
}
// Sample usage
object MyTableWithStringId : StringIdTable() {
// ...
}
class MyEntityWithStringId(id: EntityID<String>) : Entity<String>(id) {
// ...
}
我在弄清楚如何使用字符串主键编写 table 以及 table 的实体时遇到问题。无论我将 IdTable<String>
作为 Table 类型还是尝试将其与普通的 Table
一起使用都没有用。
如果您确实需要将 String 作为主键,请执行以下操作:
/*
* Base class for entities with string id
*/
abstract class StringEntityClass<out E: Entity<String>>(table: IdTable<String>, entityType: Class<E>? = null) : EntityClass<String, E>(table, entityType)
/*
* Base class for table objects with string id
*/
open class StringIdTable(name: String = "", columnName: String = "id", columnLength: Int = 10) : IdTable<String>(name) {
override val id: Column<EntityID<String>> = varchar(columnName, columnLength).entityId()
override val primaryKey by lazy { super.primaryKey ?: PrimaryKey(id) }
}
// Sample usage
object MyTableWithStringId : StringIdTable() {
// ...
}
class MyEntityWithStringId(id: EntityID<String>) : Entity<String>(id) {
// ...
}