如何在 spring 引导中获取 postgres jsonb 列的嵌套对象的值
How to get value of nested object of postgres jsonb column in spring boot
我使用 vlad mihalcea 的依赖项将 json 值存储在 table 中。
Table 姓名:valuation_report
JsonbColumn 是 parameters pojo 中的属性名称是 params
能够获取地址等单个对象的值="Address1"
{"address":"Address1","nestedObj":{"firstName":"Sanjay"}}
为了获取地址,我实现了规范和@Overriden Predicate 方法,例如
@Override
public Predicate toPredicate(Root<ValuationReport> root, CriteriaQuery<?> query, CriteriaBuilder cb)
{
return cb.equal(cb.function("jsonb_extract_path_text", String.class,root.<String>.get("params"),cb.literal(this.locale)), this.fieldToSearch);
}
但现在我想查找 NestedObj 的值,例如 nestedObj 的名字是 Sanjay。
{"nestedObj":{"firstName":"Sanjay"}}
请帮帮我
我用手机写了所有这些,很抱歉问题格式不正确。
我已经使用@Query 批注完成了此操作,但还有一种方法也可以使用条件。
我将显示我的查询来执行此操作
@Query(value = "select vr FROM ValuationReport vr where jsonb_extract_path_text(vr.params,:subParam ,:key)=:value")
List<ValuationReportJSON> getEntities(@Param("subParam") String subParam,@Param("key") String key,@Param("value") String value);
希望这有效。
这个 HQL 查询对我来说也是一样的(为了简单的方法)。
public void someFunction(String searchKey){
Query query="select obj FROM ValuationReport obj where jsonb_extract_path_text(obj.params,:subParam ,:key)=:value")
Query<ValuationReportJSON> parameters=session.createQuery(query).setParameter("value",searchKey);
List<ValuationReportJSON> resultset=parameters.getResultList();
}
希望对您有所帮助!
这是您的 JPA 规范。
public Specification<ValuationReport> getFirstNameSpecification(
final String param, final String subParam, final String value) {
return (root, query, cb) ->
cb.equal(
cb.function(
"jsonb_extract_path_text",
String.class,
root.get("params"),
cb.literal(param),
cb.literal(subParam)),
value);
}
谢谢
我使用 vlad mihalcea 的依赖项将 json 值存储在 table 中。
Table 姓名:valuation_report JsonbColumn 是 parameters pojo 中的属性名称是 params
能够获取地址等单个对象的值="Address1"
{"address":"Address1","nestedObj":{"firstName":"Sanjay"}}
为了获取地址,我实现了规范和@Overriden Predicate 方法,例如
@Override
public Predicate toPredicate(Root<ValuationReport> root, CriteriaQuery<?> query, CriteriaBuilder cb)
{
return cb.equal(cb.function("jsonb_extract_path_text", String.class,root.<String>.get("params"),cb.literal(this.locale)), this.fieldToSearch);
}
但现在我想查找 NestedObj 的值,例如 nestedObj 的名字是 Sanjay。
{"nestedObj":{"firstName":"Sanjay"}}
请帮帮我 我用手机写了所有这些,很抱歉问题格式不正确。
我已经使用@Query 批注完成了此操作,但还有一种方法也可以使用条件。 我将显示我的查询来执行此操作
@Query(value = "select vr FROM ValuationReport vr where jsonb_extract_path_text(vr.params,:subParam ,:key)=:value")
List<ValuationReportJSON> getEntities(@Param("subParam") String subParam,@Param("key") String key,@Param("value") String value);
希望这有效。
这个 HQL 查询对我来说也是一样的(为了简单的方法)。
public void someFunction(String searchKey){
Query query="select obj FROM ValuationReport obj where jsonb_extract_path_text(obj.params,:subParam ,:key)=:value")
Query<ValuationReportJSON> parameters=session.createQuery(query).setParameter("value",searchKey);
List<ValuationReportJSON> resultset=parameters.getResultList();
}
希望对您有所帮助!
这是您的 JPA 规范。
public Specification<ValuationReport> getFirstNameSpecification(
final String param, final String subParam, final String value) {
return (root, query, cb) ->
cb.equal(
cb.function(
"jsonb_extract_path_text",
String.class,
root.get("params"),
cb.literal(param),
cb.literal(subParam)),
value);
}
谢谢