Hibernate 如何在spring boot中获取postgres jsonb列嵌套对象的值

Hibernate 如何在spring boot中获取postgres jsonb列嵌套对象的值,hibernate,spring-boot,spring-data-jpa,jsonb,postgresql-9.4,Hibernate,Spring Boot,Spring Data Jpa,Jsonb,Postgresql 9.4,我使用了VladMihalcea的依赖项将json值存储在表中 表名:估价报告 JsonbColumn是参数pojo中的属性名称是参数 能够获取单个对象的值,如address=“Address1” 为了获得地址,我实现了规范和@override谓词方法,如 @Override public Predicate toPredicate(Root<ValuationReport> root, CriteriaQuery<?> query, CriteriaBuilder cb

我使用了VladMihalcea的依赖项将json值存储在表中

表名:估价报告 JsonbColumn是参数pojo中的属性名称是参数

能够获取单个对象的值,如address=“Address1”

为了获得地址,我实现了规范和@override谓词方法,如

@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);
}

请帮助我我已经用@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);
@Query(value=“从估价报告vr中选择vr,其中jsonb_提取_路径_文本(vr.params,:subParam,:key)=:value”)
列出getEntities(@Param(“subParam”)字符串子参数、@Param(“key”)字符串键、@Param(“value”)字符串值);

希望这能起作用。

这个HQL查询对我来说也能起同样的作用(对于简单的方法)

public函数(字符串搜索键){
Query Query=“从估价报告obj中选择obj,其中jsonb\u extract\u path\u text(obj.params,:subParam,:key)=:value”)
查询参数=session.createQuery(Query).setParameter(“值”,searchKey);
List 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);
}
公共规范getFirstNameSpecification(
最终字符串参数、最终字符串子参数、最终字符串值){
返回(根、查询、cb)->
cb.equal(
cb.功能(
“jsonb_提取_路径_文本”,
String.class,
root.get(“参数”),
cb.文字(参数),
cb.literal(子参数)),
价值);
}

谢谢

我是堆栈溢出新手,请帮帮我谢谢这个查询成功了。我仍然渴望用JPA或者其他什么做同样的事情
@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);
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();
}
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);
}