Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自定义例程中的Jooq额外引用函数参数_Java_Sql_Jooq - Fatal编程技术网

Java 自定义例程中的Jooq额外引用函数参数

Java 自定义例程中的Jooq额外引用函数参数,java,sql,jooq,Java,Sql,Jooq,我在postgresql中定义了两个例程,它们是array\u distinct(anyarray)和array\u remove\u all(anyarray,anyarray)。这确实是在jooq的例程类中正确生成的 除此之外,我还使用了一些函数来生成一些PostgreSQL数组运算符: inlinefun字段。连接(其他:数组):字段{ 返回DSL.field(“{0}|{1}”,数组::class.java,this,other) } 这是在Kotlin中,因此java等价物类似于:

我在postgresql中定义了两个例程,它们是
array\u distinct(anyarray)
array\u remove\u all(anyarray,anyarray)
。这确实是在jooq的
例程
类中正确生成的

除此之外,我还使用了一些函数来生成一些PostgreSQL数组运算符:

inlinefun字段。连接(其他:数组):字段{
返回DSL.field(“{0}|{1}”,数组::class.java,this,other)
}
这是在Kotlin中,因此java等价物类似于:

字段串联(字段a、数组b、类类型){
返回DSL.field(“{0}|{1}”,类型a,b);
}
现在我正试图用jooq编写此查询:

更新用户
集合组=数组\u不同(
数组_移除_所有(组,数组['a',b'])| |数组['c']
);
为了简洁起见,我删除了使此代码有效所需的两个类型转换

但是,当我这样做时:

DSL.update(用户)
.set(USERS.group、Routines.arrayDistinct(
Routines.arrayRemoveAll(
用户组,
排列(“a”、“b”)
)
.asTypedField()
.连接(数组(“c”))
).asTypedField())
asTypedField
是我需要做的事情,这样我就可以使用
串联
作为
字段
的扩展函数;在内部,它只不过是一个类型转换

生成的查询是:

更新“public”。“用户”
设置“public”。“users”。“groups”=“public”。“array\u distinct”(“public”。“array\u remove\u all”(
“公共”、“用户”、“组”,
数组[“a”和“b”]
)| |数组['c']
)
这整件事到处都是额外的引号(
)标记。我需要做什么来生成上面提到的查询


即使是concatenate中的最后一个数组,其所有元素在任何地方都使用引号
两次(
'a'
'b'
)。

jOOQ代码生成器目前(从3.10版和即将推出的3.11版开始)不支持PostgreSQL中的
anyarray
类型。挂起的功能请求位于以下位置:

您需要应用以下任一解决方法:

  • array\u remove\u all
    函数也使用普通SQL模板。您已经在为
    | |
    操作符使用普通SQL模板,因此这可能是这里的首选方法。特别是,如果您希望使两个数组类型具有相同类型的泛型类型安全性
  • 将自定义数据类型绑定用于
    array\u remove\u all
    函数: