jetbrains 暴露 - select 基于可为空的引用列
jetbrains exposed - select based on nullable reference column
我正在尝试 select 基于可空引用列的 table 中的行。
如果您仅将引用替换为标准整数列并使其可为空,则它可以很好地处理 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;
A.x
不是 Column<Int>
,它的类型实际上是 Column<EntityID<Int>>
.
看来您需要将查询写成
A.select { A.x eq EntityID(1, B) }
我正在尝试 select 基于可空引用列的 table 中的行。 如果您仅将引用替换为标准整数列并使其可为空,则它可以很好地处理 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;
A.x
不是 Column<Int>
,它的类型实际上是 Column<EntityID<Int>>
.
看来您需要将查询写成
A.select { A.x eq EntityID(1, B) }