Java 有jOOQ的接线员吗

Java 有jOOQ的接线员吗,java,postgresql,jooq,Java,Postgresql,Jooq,我很难理解以下内容。我有一个字段和一些值: Field<T> field = ...; List<T> values = ...; 上述方法不起作用。这包括: field.equal((QuantifiedSelect) PostgresDSL.any(PostgresDSL.array(values))); 第一个问题:为什么需要额外的演员阵容?是否应更改API?我不确定泛型错误到底是在哪一边(我的还是jOOQ的) 但是,在此更改之后,查询本身不起作用。它给出了错误

我很难理解以下内容。我有一个字段和一些值:

Field<T> field = ...;
List<T> values = ...;
上述方法不起作用。这包括:

field.equal((QuantifiedSelect) PostgresDSL.any(PostgresDSL.array(values)));
第一个问题:为什么需要额外的演员阵容?是否应更改API?我不确定泛型错误到底是在哪一边(我的还是jOOQ的)

但是,在此更改之后,查询本身不起作用。它给出了错误:

org.jooq.exception.SQLDialectNotSupportedException: Type class java.util.ArrayList is not supported in dialect DEFAULT
第二个问题:如何声明/创建值数组?上面的调用
PostgresDSL.array(…)
正在退回到
DSL.array(…)
,这可能是第二个问题的根源?

使用:

//使用varargs
字段相等(DSL.any(1,2,3));
//使用实际数组
整数数组={1,2,3};
field.equal(DSL.any(数组));
你的错误是:

  • 对应于PostgreSQL的
    ARRAY()
    语法,当您希望将相关子查询的结果收集到数组中时,该语法非常有用。在你的情况下,你不需要这个,因为如果这是你想要的,在这里,你可以简单地使用。注意,没有
    DSL.array(…)
  • 您引用了
    PostgresDSL
    中的运算符,它是
    DSL
    的子类。这之所以有效,是因为Java允许它,但可能导致了这里的混乱

  • 我试过了,我遇到了另一个问题,我昨天也遇到了。现在,我有:
    field.equal(DSL.any((T[])values.stream().toArray())
    。生成以下SQL
    id=any(?::any[])
    。但是,该参数永远不会被绑定,最终会出现SQL语法异常。这就是为什么我试着做
    DSL.any(DSL.array(…)
    ,正如我在最初的问题中所说的那样。我试过了,我遇到了另一个问题,我昨天也遇到了这个问题。现在,我有:
    field.equal(DSL.any((T[])values.stream().toArray())
    。生成以下SQL
    id=any(?::any[])
    。但是,该参数永远不会被绑定,最终会出现SQL语法异常。这就是为什么我试着做
    DSL.any(DSL.array(…)
    ,正如我在最初的问题中所说的那样。但正如我所说,我做错了。我会再试一次。我使用的是
    DSL.any(DSL.array((T[])values.stream().toArray())
    !伟大的成功:)。唯一困扰我的是手动转换为数组,而不是仅仅传递一个
    列表。
    。你有很多问题值得在新问题中提出,我想…:)特别是,您不应该强制转换为
    (t[])
    …我知道我不应该这样做,但API不接受
    对象[…
    ,而是
    t[].
    ,因此它需要该类型。然后我会提出一些问题,因为还有另一件事开始困扰我:)。
    org.jooq.exception.SQLDialectNotSupportedException: Type class java.util.ArrayList is not supported in dialect DEFAULT