Jooq Postgres JSON查询

时间:2014-07-31 20:42:47

标签: json postgresql jooq

使用JOOQ查询postgres json对象有什么支持?

例如,

SELECT id, data->'author'->>'first_name' as author_first_name FROM books;

1 个答案:

答案 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。

或者,编写自己的迷你API

如果您使用了很多这些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();