有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (1) 个答案

  1. # 1 楼答案

    从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

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