使用Jetbrains'字符串主键;公开库-Kotlin

使用Jetbrains'字符串主键;公开库-Kotlin,kotlin,kotlin-exposed,Kotlin,Kotlin Exposed,我在弄清楚如何编写一个带有字符串主键的表以及该表的实体时遇到了问题。无论我将IdTable作为表类型,还是尝试将其与普通的表一起使用,都不起作用。如果您确实需要将字符串作为主键,请执行以下操作: /* * Base class for entities with string id */ abstract class StringEntityClass<out E: Entity<String>>(table: IdTable<String>, entit

我在弄清楚如何编写一个带有字符串主键的表以及该表的实体时遇到了问题。无论我将
IdTable
作为表类型,还是尝试将其与普通的
表一起使用,都不起作用。

如果您确实需要将字符串作为主键,请执行以下操作:

/*
 * 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) {
    // ...
}
/*
*具有字符串id的实体的基类
*/
抽象类StringEntityClass(表:IdTable,entityType:class?=null):EntityClass(表,entityType)
/*
*具有字符串id的表对象的基类
*/
打开类StringIdTable(名称:String=),columnName:String=“id”,columnLength:Int=10):IdTable(名称){
重写val id:Column=varchar(columnName,columnLength).entityId()
用惰性{super.primaryKey?:primaryKey(id)}覆盖val primaryKey
}
//样本使用
对象MyTableWithStringId:StringIdTable(){
// ...
}
类MyEntityWithString(id:EntityID):实体(id){
// ...
}

如果您真的需要将字符串作为主键,请执行以下操作:

/*
 * 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) {
    // ...
}
/*
*具有字符串id的实体的基类
*/
抽象类StringEntityClass(表:IdTable,entityType:class?=null):EntityClass(表,entityType)
/*
*具有字符串id的表对象的基类
*/
打开类StringIdTable(名称:String=),columnName:String=“id”,columnLength:Int=10):IdTable(名称){
重写val id:Column=varchar(columnName,columnLength).entityId()
用惰性{super.primaryKey?:primaryKey(id)}覆盖val primaryKey
}
//样本使用
对象MyTableWithStringId:StringIdTable(){
// ...
}
类MyEntityWithString(id:EntityID):实体(id){
// ...
}