Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于搜索嵌套jsonb列对象的规范谓词_Java_Hibernate_Spring Boot_Jpa - Fatal编程技术网

Java 用于搜索嵌套jsonb列对象的规范谓词

Java 用于搜索嵌套jsonb列对象的规范谓词,java,hibernate,spring-boot,jpa,Java,Hibernate,Spring Boot,Jpa,我已经将jsonb对象存储在postgresql中 {"sample": {"lastName": "Sahani", "firstName": "Sanjay"}, "address": "Address2", "bedrooms": 2, "postcode": "40 BS", "propertyType": "Type 2"} 我的表名是估价报告\u json 而jsonb列名称是params 我可以使用规范获取地址,但无法获取样本的名字 我的规格是 public class Valu

我已经将jsonb对象存储在postgresql中

{"sample": {"lastName": "Sahani", "firstName": "Sanjay"}, "address": "Address2", "bedrooms": 2, "postcode": "40 BS", "propertyType": "Type 2"}
我的表名是估价报告\u jsonjsonb列名称是params 我可以使用规范获取地址,但无法获取样本的名字 我的规格是

public class ValuationReportJSONSpecification implements Specification<ValuationReportJSON>{

    private String locale;
    private String fieldToSearch;
    private String localeParameter;
public ValuationReportJSONSpecification(String locale, String fieldToSearch,String localeParameter) {
        this.locale = locale;
        this.fieldToSearch = fieldToSearch;
        this.localeParameter=localeParameter;
    }
@Override
    public Predicate toPredicate(Root<ValuationReportJSON> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
        // TODO Auto-generated method stub
        System.err.println("INSIDE");
//      return cb.equal(cb.function("jsonb_extract_path_text", String.class, root.<String>get("params"), cb.literal(this.locale)), this.fieldToSearch);
        return cb.equal(cb.function("jsonb_extract_path_text", String.class,root.<String>get("params"), cb.literal(this.locale),cb.literal(this.localeParameter)),this.fieldToSearch);
    }
}
参数

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Params implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public String address;

    private String postcode;

    private SampleObj sample;

    private int bedrooms;
//getter setter
}
样本对象

@Data
@NoArgsConstructor
@AllArgsConstructor
public class SampleObj implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private String firstName;

    private String lastName;
//getter setter
}
我不能使用连接谓词,因为我的对象没有映射或没有实体。 因为我见过同样的问题,但对象是实体:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class SampleObj implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private String firstName;

    private String lastName;
//getter setter
}