【问题标题】:Entity referencedOn using foreign key instead of Entity ID使用外键而不是实体 ID 引用的实体
【发布时间】:2021-08-04 04:03:23
【问题描述】:

所以我正在使用 Kotlin Exposed DAO API。假设我的结构中有一个我在内部使用的 id 和另一个我将导出以混淆哪个记录是哪个记录,在我的数据库中仍然具有 from:to 关系。

所以我有我的实体:

UserEntity(id: EntityID<Int>) : IntEntity(id) {
    companion object : IntEntityClass<UserEntity>(TransactionTable)

    var externalId by UserTable.external_id
    var name by UserTable.name
    

TransactionEntity(id: EntityID<Int>) : IntEntity(id) {
    companion object : IntEntityClass<TransactionEntity>(TransactionTable)

    var userId by TransactionTable.user_id
    var value by TransactionTable.value

    //relationships
    var user by UserEntity referencedOn TransactionTable.user_id

还有我的交易表

object TransactionTable: IntIdTable("transaction_1"){
    var user_id = integer("user_id").references(UserTable.external_id)
    var value= double("value")

这里的问题是,即使我的 FK 引用 external_id,实体也会查找 UserEntity 的 ID,所以我会有一个 IllegalStateException 告诉我没有这样的用户,id = " my_extenal_id"...

我能否在不使用 DSL API 的情况下引用我的实体的关系以使用 FK 加入,甚至明确说明我希望它用于加入的字段?

我知道我可以使用 DSL API 解决这个问题,但我想继续使用我的 DAO API...

谢谢。

【问题讨论】:

    标签: kotlin kotlin-exposed


    【解决方案1】:

    在 Exposed DAO 中,所有引用都与 id 列一起使用,因此除非您将 external_id 定义为 id 列,否则无法使其正常工作:

        object UserTable : IdTable<Int>("Users") {
            val pkColumn = integer("id").autoIncrement()
            val external_id = integer("external_id")
            override val id: Column<EntityID<Int>> = external_id.entityId()
        }
    

    【讨论】:

    • 嗯,但是我需要我的表只使用外部 id 作为 id,对.. 这对我来说是不行的......但我担心这一点。谢谢
    • 也许 DAO API 将来可能会有这个特性,就像它在 Python 的 SqlAlchemy 中一样。您定义关系引用的键,或者它寻求该特定字段的引用......拥有DAO非常好,但在某些情况下它有点僵化
    猜你喜欢
    • 2011-09-12
    • 2021-11-26
    • 2021-10-10
    • 1970-01-01
    • 2018-11-13
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多