对 oracle json_value 函数使用内联文字而不是表达式

问题描述

我正在使用 javax.persistence.criteria.CriteriaBuilder,但在使用持久性 API 来执行此简单(oracle)sql 时遇到问题:SELECT * FROM foo ORDER BY json_value(json_text,'$.type');

我拥有的是

CriteriaBuilder cb= em.getCriteriaBuilder();
CriteriaQuery<Foo> query= cb.createquery(Foo.class);
Root<QcJob> r = query.from(Foo.class);

Expression exp = cb.function("json_value",String.class,r.get("json_text"),cb.literal("$.type"));
query.orderBy(exp);

我收到以下错误 ORA-40454: path expression not a literal 因为底层休眠实现生成sqlSELECT * FROM foo foo0_ order by json_value(foo0_.json_text,?)

Oracle 要求有一个文字并且没有表达式替换。我找到了这个 https://stackoverflow.com/a/48721133/1738539,但我没有 org.hibernate.jpa.criteria.expression.LiteralExpression,因为我想保持它与任何特定实现无关。

还有其他方法可以为这个函数提供休眠内联文字吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)