我有一个查询,用于获取表上的所有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