具有超过22列的jOOQ查询示例

时间:2015-12-03 22:25:28

标签: java sql jooq

我正在寻找如何执行超过22行的jOOQ查询的示例。

http://www.jooq.org/doc/latest/manual/sql-building/column-expressions/row-value-expressions/

告诉我这是可能的,但我还没能找到一个例子。

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:4)

从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用户的角度来看,API &#34;感觉&#34; 完全相同,无论您选择22列或更少列(安全键入),还是23列或更多列(没有类型安全)。

使用UNION

失去类型安全性

当您将类型安全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();

答案 1 :(得分:0)

这似乎与此有关:jOOQ - support for UPDATE ... SET ... query with arbitrary degree

我对jooq一无所知,我只是在google上进行了快速搜索。