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(数组));
你的错误是:
ARRAY()
语法,当您希望将相关子查询的结果收集到数组中时,该语法非常有用。在你的情况下,你不需要这个,因为如果这是你想要的,在这里,你可以简单地使用。注意,没有DSL.array(…)
PostgresDSL
中的运算符,它是DSL
的子类。这之所以有效,是因为Java允许它,但可能导致了这里的混乱我试过了,我遇到了另一个问题,我昨天也遇到了。现在,我有:
field.equal(DSL.any((T[])values.stream().toArray())
。生成以下SQLid=any(?::any[])
。但是,该参数永远不会被绑定,最终会出现SQL语法异常。这就是为什么我试着做DSL.any(DSL.array(…)
,正如我在最初的问题中所说的那样。我试过了,我遇到了另一个问题,我昨天也遇到了这个问题。现在,我有:field.equal(DSL.any((T[])values.stream().toArray())
。生成以下SQLid=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