hibernate/hibernate-orm · error · QueryException
JSON path [" + jsonPath + "] uses parameter [" + parameterNa
Error message
JSON path [" + jsonPath + "] uses parameter [" + parameterName + "] that is not passed
What it means
The literal JSON path passed to json_value() contains a '$name' variable reference (from HQL's PASSING clause, e.g. '$.items[$idx]' passing idx). While expanding path elements into json_extract_string arguments, the SingleStore dialect hits a JsonParameterIndexAccess element and throws this QueryException, because passed parameters cannot be injected into the generated SQL.
Source
Thrown at hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/function/json/SingleStoreJsonValueFunction.java:66
}
final String jsonPath;
try {
jsonPath = walker.getLiteralValue( arguments.jsonPath() );
}
catch (Exception ex) {
throw new QueryException( "SingleStore json_value only support literal json paths, but got " + arguments.jsonPath() );
}
final List<JsonPathHelper.JsonPathElement> jsonPathElements = JsonPathHelper.parseJsonPathElements( jsonPath );
sqlAppender.appendSql( "json_extract_string(" );
arguments.jsonDocument().accept( walker );
for ( JsonPathHelper.JsonPathElement pathElement : jsonPathElements ) {
sqlAppender.appendSql( ',' );
if ( pathElement instanceof JsonPathHelper.JsonAttribute attribute ) {
sqlAppender.appendSingleQuoteEscapedString( attribute.attribute() );
}
else if ( pathElement instanceof JsonPathHelper.JsonParameterIndexAccess indexParameter) {
final String parameterName = indexParameter.parameterName();
throw new QueryException( "JSON path [" + jsonPath + "] uses parameter [" + parameterName + "] that is not passed" );
}
else {
sqlAppender.appendSql( '\'' );
sqlAppender.appendSql( ( (JsonPathHelper.JsonIndexAccess) pathElement ).index() );
sqlAppender.appendSql( '\'' );
}
}
sqlAppender.appendSql( ')' );
if ( arguments.returningType() != null ) {
if ( arguments.returningType().getJdbcMapping().getJdbcType().isBoolean() ) {
sqlAppender.append( " when 'true' then true when 'false' then false end " );
}
else {
sqlAppender.appendSql( " as " );
arguments.returningType().accept( walker );
sqlAppender.appendSql( ')' );
}
}View on GitHub (pinned to fad1729dce)
Solutions
- Replace the $param reference with a literal index: '$.arr[0]'.
- Interpolate the index into a literal path built in Java (validate it is an integer).
- Extract the array with json_query and index it in Java.
- Fall back to native SQL with json_extract and a bound index.
Example fix
// before - throws: $i is a path parameter select json_value(e.doc, '$.items[$i]' passing e.idx as i) from Event e // after - literal index select json_value(e.doc, '$.items[2]') from Event e
Defensive patterns
Strategy: fallback
Validate before calling
if (path.indexOf('$', 1) >= 0) throw new IllegalArgumentException("$param path unsupported on SingleStore: " + path);
String literalPath = "$.items[" + requireInt(index) + "]"; Try / catch
try {
return session.createQuery(hql, String.class).getSingleResult();
} catch (QueryException e) {
if (e.getMessage().contains("that is not passed")) {
return extractInJava(session); // fetch array, index in Java
}
throw e;
} Prevention
- Do not use the PASSING clause with json_value on SingleStore
- Interpolate validated integer indices as literal path segments
When it happens
Trigger: HQL like: select json_value(e.doc, '$.arr[$i]' passing e.idx as i) from Event e - any $param index reference inside the jsonpath of a json_value call on SingleStore.
Common situations: Runtime-selected array element extraction; queries shared across databases that rely on the PASSING clause; porting Oracle-style parametrized paths to SingleStore.
Related errors
- JSON path [" + jsonPath + "] uses parameter [" + parameterNa
- JSON path [" + jsonPath + "] uses parameter [" + parameterNa
- JSON path [" + jsonPath + "] uses parameter [" + parameterNa
- Can't emulate on error clause on SingleStore
- Can't emulate on empty clause on SingleStore
AI-assisted analysis of hibernate/hibernate-orm@fad1729dce (2026-08-22).
Data as JSON: /api/errors/22d5e00361597304.
Report an issue: GitHub.