【发布时间】:2020-10-18 18:44:45
【问题描述】:
我想使用 JPA 规范在 PostrgeSQL 的 jsonb 列中的所有值中进行搜索。
我有下表:
--------------------------------------------------------
| id | json_column |
---- ------------ ----------- --------------------------
| 1 | {"property_1":"value_1", "property_2":"value_2"} |
--------------------------------------------------------
| 2 | {"property_1":"value_1", "property_5":"value_5"} |
--------------------------------------------------------
如果我知道使用规范的字段名称,我可以在字段之间搜索匹配项,如下所示:
public List<MyEntityWithJsonField> searchAmongJsonFields() {
Specification<MyEntityWithJsonField> spec = (root, query, criteriaBuilder) -> {
Expression<String> stringExpression = criteriaBuilder.function(
"jsonb_extract_path_text"
, String.class
, root.<String>get("json_column")
, criteriaBuilder.literal("property_1")
);
return criteriaBuilder.like(stringExpression, "%value%");
};
return myEntityWithJsonFieldRepository.findAll(spec);
}
但是键的名称可能不同,也可能不存在,但我需要在这些未知字段(键)的所有“值”中寻找匹配项。
是否可以使用规范或使用本机查询来实现这一点?
不胜感激!
【问题讨论】:
标签: java postgresql jpa jsonb