地图字段上的JPA标准查询

时间:2018-12-08 17:53:51

标签: java postgresql hibernate jpa

我的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 + "%"));

0 个答案:

没有答案