【发布时间】:2018-04-21 11:14:30
【问题描述】:
我想将 Jooq 与 jsonb_agg 一起使用,以创建可以作为流读取的 jsonb 对象。有没有办法在不让 Jooq 查看数据库的情况下做到这一点?
我知道我可以让 Jooq 查看数据库并决定它找到什么聚合,但是有没有一种方法可以在不经过自省过程的情况下使用它?我已经浏览了 4 次文档,但没有看到答案。
【问题讨论】:
标签: java postgresql jooq jsonb
我想将 Jooq 与 jsonb_agg 一起使用,以创建可以作为流读取的 jsonb 对象。有没有办法在不让 Jooq 查看数据库的情况下做到这一点?
我知道我可以让 Jooq 查看数据库并决定它找到什么聚合,但是有没有一种方法可以在不经过自省过程的情况下使用它?我已经浏览了 4 次文档,但没有看到答案。
【问题讨论】:
标签: java postgresql jooq jsonb
所以答案隐藏在 DSL 文档中,关于定义字段。
之前的所有示例都使用了以下变体:
create.select(field("example1"), field("example2")).from(table(a)...
但是您可以定义自己的字段,甚至是内联函数定义。
字段定义可能类似于:
Field<Object> example1 = field("example1");
或者如果你想定义一个类型:
Field<String> example2 = field("example2", String.class);
当您想要定义更复杂的字段时,这一点变得很重要,例如:
Field<String> jsonAry = function("jsonb_agg", String.class, example2);
Jooq 真的很擅长让事情像这样组成。然后你可以:
Fiend<String> fullJson = function("jsonb_build_object", String.class, example1, example2);
然后如果你 groupBy(example1) 你会得到一个不错的 jsonb_agg 对象。
【讨论】: