java-jooq-如何在jooq-PostgreSQL中将数组绑定为param

java-jooq-如何在jooq-PostgreSQL中将数组绑定为param,java,arrays,postgresql,list,jooq,Java,Arrays,Postgresql,List,Jooq,如何在jooq查询中将数组绑定为param 这就是我添加名为“someid”的命名参数的地方 Query query = selectJoinStep.where(field("some.id").in(param("someIds"))); 我尝试使用下面的行将数组绑定到参数 query.bind("someIds", someIds); 但在生成的sql中,我得到的是对象的引用,而不是实际值,如下所示 ('[Ljava.lang.Object;@1fee4fe3')中的s

如何在jooq查询中将数组绑定为param

这就是我添加名为“someid”的命名参数的地方

    Query query = selectJoinStep.where(field("some.id").in(param("someIds")));
我尝试使用下面的行将数组绑定到参数

    query.bind("someIds", someIds);
但在生成的sql中,我得到的是对象的引用,而不是实际值,如下所示

('[Ljava.lang.Object;@1fee4fe3')中的some.id

为什么你的方法不起作用? 一个常见的误解是(?)谓词中的SQL
可以以某种方式支持数组绑定变量。这在我所知道的任何SQL方言中都是不可能的,您也不能用jOOQ这样做。所谓“这种方式”,我指的是指定一个绑定变量标记(
param
)并将多个ID绑定到它

您收到该特定错误消息的原因是jOOQ试图将实际的数组绑定变量绑定到单个参数。您可能知道,PostgreSQL支持数组,并且如果您绑定了
整数[]
,那么jOOQ会将其传递给PostgreSQL JDBC驱动程序。事实上,也许这就是您真正想要在这里使用PostgreSQL特定的
=ANY(?)
谓词所做的

字段(“some.id”).eq(任意(someid))
列表中的动态

要在
-列表中具有动态的
,必须传递参数的动态列表,例如:

字段(“some.id”).in(IntStream.range(0,someid.length)
.mapToObj(i->param(“someId”+i))
.collect(收集器.toList())
然后,您必须使用

for(int i=0;i
当然,也可以将它们直接绑定到in谓词:

字段(“some.id”).in(IntStream.range(0,someid.length)
.mapToObj(i->param(“someId”+i,i))
.collect(收集器.toList())

感谢您的回复,最后我使用了field(“some.id”).eq(any(someid))