【问题标题】:Converting an Integer[] to List<integer> automatically in JOOQ在 JOOQ 中自动将 Integer[] 转换为 List<integer>
【发布时间】:2014-06-03 18:29:34
【问题描述】:

我正在使用 PostgreSQL。我的表字段之一是一个数组:

"day_of_month" int[] DEFAULT NULL

但是我的这个表的域对象是List&lt;Integer&gt;。我想用@Column(name = "day_of_month") 注释我的域对象,这样我就可以使用fetchOneInto(MyDomainType.class)。问题是 JOOQ 将 int[] 字段转换为 Integer[] 所以我必须获取结果,将 Integer[] 转换为 List&lt;Integer&gt; 并手动填充我的域对象。有没有自动的方法来做到这一点?

【问题讨论】:

    标签: java postgresql jooq


    【解决方案1】:

    不幸的是,jOOQ-codegen 的类型重写系统不是很复杂,这意味着像数组或用户定义类型这样的“特殊”数据类型有点难以重写。

    有一个待处理的功能请求#3310 来纠正这个问题,但不会在 jOOQ 3.5 之前。与此同时,恐怕你:

    • 要么自己转换这些类型:
    • 对生成的 jOOQ 元数据进行后处理以修补此类 Field 定义
    • 应用Taeir's solution 并实施RecordMapperProvider。这不会修改 jOOQ 记录中的数组值,但至少可以在映射到 MyDomainType 时将数组映射到 List

    更新:事实上,我怀疑#3062 可能足以涵盖您的用例。也许,我们为 jOOQ 3.4 赋予了更高的优先级

    【讨论】:

      【解决方案2】:

      我不确定“自动”是什么意思,但您可以使用 List&lt;Integer&gt; list = Arrays.asList(array); 将整数数组转换为整数列表,其中数组是您的整数数组。

      其他方式也可以:Integer[] array = list.toArray(new Integer[0]);

      编辑: 让 JOOQ 为您执行此操作是可能的。我自己没有使用过它,但是通过查看文档,似乎可以将RecordMapper 添加到RecordMapperProvider。使用这些映射器之一,您可以定义应如何将某些 db 类型转换为 java 类型(我认为至少)。然而,这可能比仅仅打一个小电话Arrays.asList() 多得多。

      【讨论】:

      • 我想让 JOOQ 为我做List&lt;Integer&gt; list = Arrays.asList(array),所以我自己不填充域对象。
      猜你喜欢
      • 1970-01-01
      • 2022-09-30
      • 1970-01-01
      • 2010-09-06
      • 2016-12-26
      • 1970-01-01
      相关资源
      最近更新 更多