如何在 jOOQ 中编写以下 SQL 查询?
select row (user1."surname", user1."id") from "user" as user1
union all
select row (user2."id") from "user" as user2
这样做不会编译,因为这两行是
Row2
和Row1
,显然它们不是同一类型。
db.select(row(user1.SURNAME, user1.ID)).from(user1)
.unionAll(select(row(user2.ID)).from(user2))
.fetch()
我发现的唯一解决方法是使用
row(Collection<?> values)
,但是似乎必须有更好的方法来做到这一点。
db.select(row(listOf(user1.SURNAME, user1.ID))).from(user1)
.unionAll(select(row(listOf(user2.ID))).from(user2))
.fetch()
问题似乎是“我如何告诉编译器更喜欢可变参数重载
row(SelectField...)
而不是类型重载(例如row(SelectField, SelectField)
)以摆脱类型安全。
在 Kotlin 中,没有比使用
listOf()
或 *arrayOf()
(与扩展运算符)更好的方法了,就像在 Java 中一样,你必须使用 List.of()
或 new SelectField[] { ... }
来告诉编译器使用集合重载,因为如果存在更具体、适用的重载,则编译器始终会降低可变参数重载的优先级。通常,这是所需的行为,因为通常您想要类型安全。