Ram*_*amu 5 criteria spring-data
我有下表temp_tbl (postgres):
ID(int) NAME(TEXT) LINKS(jsonb)
-------- ---------- -------------------
1 Name1 ["1","23","3", "32]
2 Name2 ["11","3","31", "2]
3 Name3 ["21","13","3", "12]
Run Code Online (Sandbox Code Playgroud)
现在,我的本机查询获取具有值为“3”的“LINKS”的行是:
select * from temp_tbl where links @> '["3"]'
Run Code Online (Sandbox Code Playgroud)
返回第 2 行和第 3 行。
我想使用 org.springframework.data.jpa.domain.Specification 实现这个查询
我已经实现了类似下面的内容,其中 jsonb 列不是数组,但使用jsonb_extract_path_text具有键值 json 。但是上面的列只存储数组中的值。
我的实体类。
ID(int) NAME(TEXT) LINKS(jsonb)
-------- ---------- -------------------
1 Name1 ["1","23","3", "32]
2 Name2 ["11","3","31", "2]
3 Name3 ["21","13","3", "12]
Run Code Online (Sandbox Code Playgroud)
我需要帮助使用标准构建器将上述查询转换为规范。
小智 2
使用 Jpa 规范检查 jsonb 数组是否包含字符串的一种方法是使用函数jsonb_contains
和jsonb_build_array
,后者用于将字符串更改为 jsonb 数组以在 中使用jsonb_contains
。
public static Specification<TempTbl> linkInLinks(String linkId) {
return (root, query, builder) -> {
Expression toJsonbArray = builder.function("jsonb_build_array", String.class, builder.literal(linkId));
return builder.equal(builder.function("jsonb_contains", String.class, root.get("linkIds"), toJsonbArray), true);
};
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
427 次 |
最近记录: |