Как получить значение вложенного объекта столбца postgres jsonb при весенней загрузке - PullRequest
2 голосов
/ 11 февраля 2020

Я использовал зависимость Влада Михалчеа для хранения json значения в таблице.

Имя таблицы: valuation_report JsonbColumn is параметры атрибут имя в pojo: params

Возможность получить значение одного объекта, например address = "Address1"

{"address":"Address1","nestedObj":{"firstName":"Sanjay"}}

Чтобы получить адрес, я реализовал спецификацию и @Overriden Метод предикатов, такой как

@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, например, firstName nestedObj - Санджай.

{"nestedObj":{"firstName":"Sanjay"}}

Пожалуйста, помогите мне ... И я написал все это на своем мобильном извините за плохой формат вопроса?.

Ответы [ 2 ]

2 голосов
/ 12 февраля 2020

Этот 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();
}

Надеюсь, это поможет!

2 голосов
/ 12 февраля 2020

Я сделал это с помощью аннотации @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);

Надеюсь, что это работает.

...