Как выбрать JSON_VALUE в запросе API JPA Criteria - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть запрос, который я использую для получения всех идентификаторов и имен в таблице, и я хотел бы добавить описания, но описания находятся внутри объекта JSON. Sql будет выглядеть так:

SELECT id, name, JSON_VALUE(json,'$.description') as description FROM widget;

И мой код выглядит так:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Object[]> cq = cb.createQuery(Object[].class);
Root<Widget> r = cq.from(Widget.class);
List<Selection<?>> selections = new ArrayList<Selection<?>>();
selections.add(r.get("WidgetId"));
selections.add(r.get("WidgetName"));
selections.add(cb.function("JSON_VALUE", String.class, r.get("json"), 
cb.literal("$.description")));
cq.select(cb.array(selections.toArray(new Selection<?>[selections.size()])));
TypedQuery<Object[]> q = entityManager.createQuery(cq);
return q.getResultList();

Отлично работает без строки JSON_VALUE, но с этим я получаю:

java.lang.IllegalStateException: нет типа данных для узла: org.hibernate.hql.internal.ast.tree.MethodNode

...