【发布时间】:2016-03-23 19:37:18
【问题描述】:
PostgreSQL 9.4.5 jOOQ 3.7.2 方言设置为 POSTGRES_9_4
我正在尝试使用 jOOQ 来替换这个原生 postgresql 聚合表达式:
array_agg(row_to_json(foo) order by "foo"."name" asc) filter (where "attribute".name is not null)
jOOQ DSL 看起来应该可以使用以下代码工作:
arrayAgg(rowToJson(FOO)).orderBy(FOO.NAME).filterWhere(FOO.NAME.isNotNull()))
其中 rowToJson 是 postgres 函数的包装器。这里呈现的 SQL 是这样的:
array_agg(row_to_json(foo) order by "foo"."name" asc)
目前我正在解决这个问题:
public static <T> Field<T[]> arrayAgg(Field<T> field, final SortField<?> sort, final Condition filter) {
return field("array_agg({0} order by {1}) filter (where {2})", field.getDataType().getArrayDataType(), field, sort, filter);
}
问题是,第一个代码是否可以工作?如果不是,在 jOOQ 中生成这个聚合函数的正确方法是什么?
【问题讨论】:
标签: java jooq postgresql-9.4