在JOOQ </integer>中自动将Integer []转换为List <integer>

时间:2014-06-02 11:06:25

标签: java postgresql jooq

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

"day_of_month" int[] DEFAULT NULL

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

2 个答案:

答案 0 :(得分:1)

我不确定您对&#34; Automatic&#34;的意思,但您可以将整数数组转换为List<Integer> list = Arrays.asList(array);的整数列表,其中array是您的整数数组。< / p>

另一种方式也是可能的:Integer[] array = list.toArray(new Integer[0]);

编辑: JOOQ可能会为您执行此操作。我自己还没有使用它,但通过查看文档,似乎可以向RecordMapper添加RecordMapperProvider。使用其中一个映射器,您可以定义如何将某些db类型转换为java类型(至少我认为)。然而,这可能比仅仅对Arrays.asList()进行一次小调用要多得多。

答案 1 :(得分:1)

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

有待处理的功能请求#3310来解决此问题,但它不会在jOOQ 3.5之前。与此同时,我害怕你:

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

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