如何使用 jOOQ 执行特定查询

How to execute specific query using jOOQ

我在使用 PostgreSQL 数据库的项目中使用 jOOQ。我在没有特定条件的情况下执行查询没有任何问题,但是如何使用 jOOQ 执行以下查询?

-- missed the top of query
WHERE pow.tags @> ARRAY [?] 
AND pow.tags @> ARRAY [?] 
AND position('access,yes' IN array_to_string(pow.tags, ',')) = 0 
AND city = ?

有时候,我需要用PostGIS函数执行请求,我应该如何在jOOQ中写它?

下面是该谓词的写法:

Condition condition =
     POW.TAGS.contains(new String[] { "a", "b", "c" })
.and(POW.TAGS.contains(new String[] { "b", "c", "d" }) // Just assuming some tags here
.and(position("access,yes", arrayToString(POW.TAGS, ",")).eq(zero()))
.and(POW.CITY.eq("city"));

以上答案假设以下静态导入:

import static org.jooq.impl.DSL.*;
import static org.jooq.util.postgres.PostgresDSL.*;

Field.contains()

可能存在问题

当您的 TAGS 列的类型为 TEXT 而不是 VARCHAR:

时,Field.contains() 存在一个已知问题

https://github.com/jOOQ/jOOQ/issues/4754

解决方法是使用纯 SQL:

public static Condition myContains(Field<String[]> field, String[] array) {
    return contains("{0} @> {1}", field, val(array));
}