【发布时间】:2017-08-24 14:53:38
【问题描述】:
我无法理解以下内容。我有一个字段和一些值:
Field<T> field = ...;
List<T> values = ...;
现在,我想在WHERE 子句中表达过滤器field = ANY({... the values ....})。 PostgreSQL 支持这个ANY(array of values) 操作符。我从https://blog.jooq.org/2017/03/30/sql-in-predicate-with-in-list-or-with-array-which-is-faster/ 得到这个想法。
我尝试了以下创建条件:
field.equal(PostgresDSL.any(PostgresDSL.array(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(...),这可能是第二个问题的根源?
【问题讨论】:
标签: java postgresql jooq