我正在使用PostgreSQL。我的一个表字段是一个数组:
"day_of_month" int[] DEFAULT NULL
但是这个表的域对象是List<Integer>
。我想用@Column(name = "day_of_month")
注释我的域对象,以便我可以使用fetchOneInto(MyDomainType.class)
。问题是JOOQ会将int[]
字段转换为Integer[]
,因此我必须获取结果,将Integer[]
转换为List<Integer>
并手动填充我的域对象。有没有自动的方法来做到这一点?
答案 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之前。与此同时,我害怕你:
Field
定义RecordMapperProvider
。这不会修改jOOQ记录中的数组值,但至少在映射到List
时,您可以将数组映射到MyDomainType
。更新:事实上,我怀疑#3062可能足以涵盖您的用例。也许,我们为jOOQ 3.4提供了更高的优先级