我在使用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中编写它?
答案 0 :(得分:2)
以下是编写谓词的方法:
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()
如果Field.contains()
列的类型为TAGS
,而不是TEXT
,则VARCHAR
存在已知问题:
https://github.com/jOOQ/jOOQ/issues/4754
解决方法是使用纯SQL:
public static Condition myContains(Field<String[]> field, String[] array) {
return contains("{0} @> {1}", field, val(array));
}