暴露的喷气脑-基于可为空的参考列选择

时间:2019-12-26 05:31:29

标签: kotlin kotlin-exposed

我正在尝试基于可空引用的列从表中选择行。 如果仅用标准整数列替换引用,并将其保留为可为空,则它可以很好地处理eq。我还尝试用optReference替换引用,但这没什么不同。

错误是由编译器给出的。

None of the following functions can be called with the arguments supplied.
Expression<in EntityID<Int>?>.eq(Expression<in EntityID<Int>?>)   where T = EntityID<Int>?, S1 = EntityID<Int>?, S2 = EntityID<Int>? for    infix fun <T, S1 : T?, S2 : T?> Expression<in S1>.eq(other: Expression<in S2>): Op<Boolean> defined in org.jetbrains.exposed.sql.SqlExpressionBuilder
ExpressionWithColumnType<T>.eq(T)   where T cannot be inferred for    infix fun <T> ExpressionWithColumnType<T>.eq(t: T): Op<Boolean> defined in org.jetbrains.exposed.sql.SqlExpressionBuilder
ExpressionWithColumnType<EntityID<Int>>.eq(Int?)   where T = Int for    infix fun <T : Comparable<T>> ExpressionWithColumnType<EntityID<T>>.eq(t: T?): Op<Boolean> defined in org.jetbrains.exposed.sql.SqlExpressionBuilder

一个基本的工作示例,显示Intellij给出的错误。

object A : IntIdTable("a") {
    val n = varchar("n", 255)
    val x = reference("x", B).nullable()
}

object B : IntIdTable("b") {
    val i = varchar("m", 255)
    val y = integer("y")
}

fun main() {
    connectToDatabase()

    transaction {
        SchemaUtils.createMissingTablesAndColumns(A, B)

        A.select { A.x eq 1 }
    }
}

我希望它运行的等效SQL是:

select * from test.a as a where a.x = 1;

1 个答案:

答案 0 :(得分:0)

notifyListeners();不是A.x,其类型实际上是Column<Int>

您似乎需要将查询写为

Column<EntityID<Int>>