Hibernate 如何在spring boot中获取postgres jsonb列嵌套对象的值
我使用了VladMihalcea的依赖项将json值存储在表中 表名:估价报告 JsonbColumn是参数pojo中的属性名称是参数 能够获取单个对象的值,如address=“Address1” 为了获得地址,我实现了规范和@override谓词方法,如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
@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);
}