org.jooq.lambda.tuple - 创建元组

org.jooq.lambda.tuple - Create Tuples

在我的项目中,我需要使用 org.jooq.lambda.Tuple 来映射 simpleflatmapper JdbcMapperFactory 的字段:

public static final JdbcMapper<Tuple17<
        Entity1,
        Entity2,
        Entity3,
        Entity4,
        Entity5,
        Entity6,
        Entity7,
        Entity8,
        Entity9,
        Entity10,
        Entity11,
        Entity12,
        Entity13,
        Entity14,
        Entity15,
        Entity16,
        Entity17
        >> MAPPER =
        JdbcMapperFactory
                .newInstance()
                .unorderedJoin()
                .newMapper(
                        new TypeReference<>() {
                        });

但是我在库 org.jooq.jool:0.9.12

的包 org.jooq.lambda.tuple 中只有 16 个元组

我的想法是避免为我的下一个 Tuple17,18,19... 等编写样板代码

另外,我找了好久想提一下Jooq类似的,现成的结构,没找到。另外,我找不到任何此类元组的生成器。

有人可以帮忙吗?

如果语言不能对“通用类型变量元数”进行抽象,库必须通过创建类似 jOOλ 的 Tuple[N] 类型 (max(N) = 16) 或 jOOQ 的 Record[N] 类型来解决这个问题(最大值(N)= 22)。类型安全的上限是任意选择的。一个或另一个数字没有充分的理由。所以,你最终将不可避免地 运行 进入你 运行 进入的限制。

通常有嵌套元组的工具来解决这个问题。 IE。以下两种类型之间没有显着差异:

Tuple3<A, B, C>
Tuple2<A, Tuple2<B, C>>

如果您必须使用您已经开始使用的堆栈(jOOλ 和 SimpleFlatMapper),那么我怀疑这是解决您遇到的限制的一种方法。当然,还有其他方法,例如

  • 在某些时候,您可以只使用 Object[] 并放弃类型安全。
  • 如果您使用的是 jOOQ,则可以使用 jOOQ 中已有的 nested records / SQL,因此实际上您永远不会达到 16 个属性的限制

后一个建议暗示可能有 jOOQ-only 解决您的潜在问题的方法,这消除了对其他两个库的需要。我很高兴在 follow-up 问题中研究该选项。