jooq:如何为静态 DSL 方法配置方言?
jooq: How to configure dialect for static DSL methods?
我有 dsl
POSTGRES_9_4
方言。我尝试使用 org.jooq.impl.DSL.Condition
的自定义选择查询:
dsl.selectFrom(TAG_JSON).where(condition("translations ??| array[?]", normValues)).fetch(mapper);
它抛出异常:
org.jooq.exception.SQLDialectNotSupportedException: Type class java.util.ArrayList is not supported in dialect DEFAULT
at org.jooq.impl.DefaultDataType.getDataType(DefaultDataType.java:757)
at org.jooq.impl.DefaultDataType.getDataType(DefaultDataType.java:704)
at org.jooq.impl.DSL.getDataType(DSL.java:14371)
at org.jooq.impl.Utils.queryParts(Utils.java:1565)
at org.jooq.impl.SQLImpl.<init>(SQLImpl.java:64)
at org.jooq.impl.DSL.sql(DSL.java:6240)
at org.jooq.impl.DSL.condition(DSL.java:7323)
为什么使用DEFAULT
方言?如何配置全局一个?
错误信息有点误导。您的意图似乎是 array[?]
将 List<String>
作为单个绑定值传递给数组构造函数。这行不通。您有两个选择:
绑定单个数组
condition("translations <op> ?::text[]", normValues.toArray(new String[0]))
将数组绑定为绑定值列表
condition("translations <op> {0}", list(
normValues.stream().map(DSL::val).toArray(QueryPart[]::new)
))
这是使用 DSL.list()
创建绑定变量列表。
请注意,在这两种情况下,我都避免使用您的 ??|
运算符,因为 jOOQ 会解析纯 SQL 文本以获取绑定值 (?
),目前无法识别 ??|
作为非绑定变量序列 (I've registered an issue for this)。如果该运算符有文本替代表示,我建议改用它。
我有 dsl
POSTGRES_9_4
方言。我尝试使用 org.jooq.impl.DSL.Condition
的自定义选择查询:
dsl.selectFrom(TAG_JSON).where(condition("translations ??| array[?]", normValues)).fetch(mapper);
它抛出异常:
org.jooq.exception.SQLDialectNotSupportedException: Type class java.util.ArrayList is not supported in dialect DEFAULT
at org.jooq.impl.DefaultDataType.getDataType(DefaultDataType.java:757)
at org.jooq.impl.DefaultDataType.getDataType(DefaultDataType.java:704)
at org.jooq.impl.DSL.getDataType(DSL.java:14371)
at org.jooq.impl.Utils.queryParts(Utils.java:1565)
at org.jooq.impl.SQLImpl.<init>(SQLImpl.java:64)
at org.jooq.impl.DSL.sql(DSL.java:6240)
at org.jooq.impl.DSL.condition(DSL.java:7323)
为什么使用DEFAULT
方言?如何配置全局一个?
错误信息有点误导。您的意图似乎是 array[?]
将 List<String>
作为单个绑定值传递给数组构造函数。这行不通。您有两个选择:
绑定单个数组
condition("translations <op> ?::text[]", normValues.toArray(new String[0]))
将数组绑定为绑定值列表
condition("translations <op> {0}", list(
normValues.stream().map(DSL::val).toArray(QueryPart[]::new)
))
这是使用 DSL.list()
创建绑定变量列表。
请注意,在这两种情况下,我都避免使用您的 ??|
运算符,因为 jOOQ 会解析纯 SQL 文本以获取绑定值 (?
),目前无法识别 ??|
作为非绑定变量序列 (I've registered an issue for this)。如果该运算符有文本替代表示,我建议改用它。