【发布时间】:2016-03-08 17:46:08
【问题描述】:
我正在寻找如何执行超过 22 行的 jOOQ 查询的示例。
http://www.jooq.org/doc/latest/manual/sql-building/column-expressions/row-value-expressions/
告诉我这是可能的,但我找不到示例。
谁能指出我正确的方向?
【问题讨论】:
我正在寻找如何执行超过 22 行的 jOOQ 查询的示例。
http://www.jooq.org/doc/latest/manual/sql-building/column-expressions/row-value-expressions/
告诉我这是可能的,但我找不到示例。
谁能指出我正确的方向?
【问题讨论】:
从 jOOQ 3.7 开始(目前还没有计划改变这一点),22 是可以以类型安全方式获取的最大列数。超过 22,您仍然可以执行查询,但 jOOQ 的 API 将不再跟踪您的记录类型。例如:
// Still type safe
Result<Record22<Integer, String, ..., Integer>> result =
DSL.using(configuration)
.select(INT_COLUMN1, STRING_COLUMN2, ..., INT_COLUMN22)
.from(TABLE)
.fetch();
// Add one more column, and "lose" type safety
Result<Record> result =
DSL.using(configuration)
.select(INT_COLUMN1, STRING_COLUMN2, ..., INT_COLUMN22, STRING_COLUMN23)
.from(TABLE)
.fetch();
从 API 用户的角度来看,无论您选择 22 列或更少列(安全类型)还是 23 列或更多列(没有类型安全),API“感觉” 完全相同。
当您将类型安全的UNION 查询与非类型安全的查询进行比较时,差异可能会变得最明显:
// Still type safe
Result<Record22<Integer, String, ..., Integer>> result =
DSL.using(configuration)
.select(INT_COLUMN1, STRING_COLUMN2, ..., INT_COLUMN21)
.from(TABLE)
.union(
// ^^^^^ compilation error here
select(INT_COLUMN1, STRING_COLUMN2, ..., INT_COLUMN21, INT_COLUMN22)
.from(TABLE))
.fetch();
// Add one more column, and "lose" type safety
Result<Record> result =
DSL.using(configuration)
.select(INT_COLUMN1, STRING_COLUMN2, ..., STRING_COLUMN23)
.from(TABLE)
.union(
// ^^^^^ This compiles, even if it's wrong
select(INT_COLUMN1, STRING_COLUMN2, ..., STRING_COLUMN23, STRING_COLUMN24)
.from(TABLE))
.fetch();
【讨论】: