如何在JPA Criteria API查询中选择JSON_VALUE

时间:2018-11-07 18:45:48

标签: jpa criteria-api json-value

我有一个查询,用于获取表上的所有ID和名称,我想添加说明,但说明位于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

0 个答案:

没有答案