使用JOOQ查询postgres json对象有什么支持?
例如,
SELECT id, data->'author'->>'first_name' as author_first_name FROM books;
答案 0 :(得分:16)
目前(截至jOOQ 3.4),jOOQ中没有对PostgreSQL特定的JSON运算符的本机支持。还有一个待处理feature request #2788来支持PostgreSQL json
数据类型。
但是,您始终可以使用plain SQL。您的查询可以用jOOQ表示:
DSL.using(configuration)
.select(BOOKS.ID, field("{0}->'author'->>'first_name'",
String.class, BOOKS.DATA
).as("author_first_name"))
.from(BOOKS)
.fetch();
有关详细信息,请参阅DSL.field()
方法javadocs。
如果您使用了很多这些JSON路径表示法,那么您可以将迷你API分解为:
public static Field<Object> jsonObject(Field<?> field, String name) {
return DSL.field("{0}->{1}", Object.class, field, DSL.inline(name));
}
public static Field<String> jsonText(Field<?> field, String name) {
return DSL.field("{0}->>{1}", String.class, field, DSL.inline(name));
}
以上可以这样使用:
DSL.using(configuration)
.select(BOOKS.ID, jsonText(jsonObject(BOOKS.DATA, "author"), "first_name")
.as("author_first_name"))
.from(BOOKS)
.fetch();