我的PostgreSQL数据库中有一个JSONB类型列,我只希望搜索键值对中的值。 Postgres中有一个函数可以检索它,它是 jsonb_each_text 。 (请参阅:https://www.postgresql.org/docs/9.5/functions-json.html)
这将返回2列:key(键列表)和value值列表。例如
键|值
----- + -------
一个| “ foo”
b | “酒吧”
实体看起来像这样:
@Entity
@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
@TypeDef(name = "pgsql_enum", typeClass = PostgreSQLEnumType.class)
public class Book {
... other fields
@Column(columnDefinition = "jsonb")
@Type(type = "jsonb")
private Map<String, String> metadata;
}
我已经尝试过这种方法,但是我无法弄清楚如何仅提取列表的值。
predicates.add(criteriaBuilder.like(criteriaBuilder.function("jsonb_each_text", Map.class, book.get("metadata")), "%" + searchTerm + "%"));