``` import org.jetbrains.exposed.dao.* import org....
# exposed
j
Copy code
import org.jetbrains.exposed.dao.*
import org.jetbrains.exposed.sql.Column
import org.jetbrains.exposed.sql.Database
import org.jetbrains.exposed.sql.transactions.transaction
import org.jetbrains.exposed.sql.SchemaUtils.create
import org.jetbrains.exposed.sql.StdOutSqlLogger
import org.jetbrains.exposed.sql.transactions.DEFAULT_ISOLATION_LEVEL
import org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManager
import org.jetbrains.exposed.sql.transactions.TransactionManager
import java.sql.Connection.TRANSACTION_READ_UNCOMMITTED
import java.util.*

open class UUIDIdTable(name: String = "", columnName: String = "id") : IdTable<UUID>(name) {
    override val id: Column<EntityID<UUID>> = uuid(columnName).primaryKey().entityId()
}

abstract class UUIDEntity(id: EntityID<UUID>) : Entity<UUID>(id)


abstract class UUIDEntityClass<out E : UUIDEntity>(table: IdTable<UUID>, entityType: Class<E>? = null) : EntityClass<UUID, E>(table, entityType)

object User : UUIDIdTable("user") {
    val email = text("email")
    val password = text("password")
}

class UserModel(id: EntityID<UUID>) : UUIDEntity(id) {
    companion object : UUIDEntityClass<UserModel>(User)

    var email by User.email
    var password by User.password
}

fun main(args: Array<String>) {
    Database.connect("jdbc:sqlite:test.db", driver = "org.sqlite.JDBC", manager = {
        ThreadLocalTransactionManager(it, TRANSACTION_READ_UNCOMMITTED)
    })
    transaction {
        logger.addLogger(StdOutSqlLogger)
        create(User)

        UserModel.new {
            email = "jkbbwr"
            password = "password123"
        }
    }
}