【问题标题】:jooq: How to configure dialect for static DSL methods?jooq:如何为静态 DSL 方法配置方言?
【发布时间】:2016-09-25 21:47:25
【问题描述】:

我有dslPOSTGRES_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 方言?如何配置全局?

【问题讨论】:

    标签: java postgresql configuration jooq


    【解决方案1】:

    错误信息有点误导。您的意图似乎是让array[?]List&lt;String&gt; 作为单个绑定值传递给数组构造函数。这行不通。你有两个选择:

    绑定单个数组

    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 文本以获取绑定值 (?) 并且当前不将 ??| 识别为非绑定变量序列 (@987654322 @)。如果该运算符具有文本替代表示,我建议使用它。

    【讨论】:

    • 我为?| 操作员创建了alias
    • @fedor.belov:有趣的是,我不知道这是可能的。我怀疑,如果您在 ??| 之外创建一个文本别名,则可以在此处解决 jOOQ 的限制...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    相关资源
    最近更新 更多