У меня есть столбец типа JSONB в моей базе данных PostgreSQL, и я хочу искать только значения в парах ключ-значение.В Postgres существует функция для извлечения этого, которая jsonb_each_text .(См .: https://www.postgresql.org/docs/9.5/functions-json.html)
Возвращает 2 столбца: ключ (список ключей) и значение списка значений. Например:
ключ | значение
----- +-------
a | "foo"
b | "bar"
Объект выглядит примерно так:
@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 + "%"));