{"record":{"id":"8fcc17af2dcd7f0d","repo":"hibernate/hibernate-orm","slug":"the-parameter-param-is-not-part-of-this-query","errorCode":null,"errorMessage":"The parameter [{param}] is not part of this Query","messagePattern":"The parameter \\[(.+?)\\] is not part of this Query","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"hibernate-core/src/main/java/org/hibernate/query/internal/AbstractCommonQueryContract.java","lineNumber":931,"sourceCode":"\t\t\t\t\t\t\"Type specified for parameter at position \" + position + \" is incompatible\"\n\t\t\t\t\t\t+ \" (\" + parameterType.getName() + \" is not assignable to \" + type.getName() + \")\"\n\t\t\t\t);\n\t\t\t}\n\t\t\t@SuppressWarnings(\"unchecked\") // safe, just checked\n\t\t\tvar castParameter = (QueryParameterImplementor<T>) parameter;\n\t\t\treturn castParameter;\n\t\t}\n\t\tcatch ( HibernateException e ) {\n\t\t\tthrow getExceptionConverter().convert( e );\n\t\t}\n\t}\n\n\t@Override\n\tpublic <T> T getParameterValue(@Nonnull Parameter<T> param) {\n\t\tsession.checkOpen( false );\n\t\tfinal var parameter = getParameterMetadata().resolve( param );\n\t\tif ( parameter == null ) {\n\t\t\tthrow new IllegalArgumentException( \"The parameter [\" + param + \"] is not part of this Query\" );\n\t\t}\n\t\tfinal var binding =\n\t\t\t\tgetQueryParameterBindings()\n\t\t\t\t\t\t.getBinding( getQueryParameter( parameter ) );\n\t\tif ( binding == null || !binding.isBound() ) {\n\t\t\tthrow new IllegalStateException( \"Parameter value not yet bound : \" + param );\n\t\t}\n\t\tif ( binding.isMultiValued() ) {\n\t\t\t// TODO: THIS IS UNSOUND, we should really throw in this case\n\t\t\t//noinspection unchecked\n\t\t\treturn (T) binding.getBindValues();\n\t\t}\n\t\telse {\n\t\t\treturn binding.getBindValue();\n\t\t}\n\t}\n\n\t@Override","sourceCodeStart":913,"sourceCodeEnd":949,"githubUrl":"https://github.com/hibernate/hibernate-orm/blob/fad1729dce015f908198d57a8d80274a30f905a5/hibernate-core/src/main/java/org/hibernate/query/internal/AbstractCommonQueryContract.java#L913-L949","documentation":"Thrown by getParameterValue(Parameter<T> param) when getParameterMetadata().resolve(param) returns null, i.e. the jakarta Parameter object you passed does not correspond to any parameter declared by THIS query. resolve matches by name (for named parameters) or position (for ordinal ones); a Parameter from another query, a hand-constructed ParameterImpl, or one whose name/position never appears in this query resolves to null and this IllegalArgumentException fires.","triggerScenarios":"query.getParameterValue(paramFromAnotherQuery) where paramFromAnotherQuery came from otherQuery.getParameters() or otherQuery.getParameter(\"x\"). Passing a Parameter obtained before the query was rewritten (e.g. after flush-mode re-creation). A Parameter whose position exceeds the ordinal count of this query.","commonSituations":"Utility methods that accept (Query, Parameter) pairs and are called with mismatched pairs; caching Parameter objects statically and reusing them for freshly created queries; refactoring named→positional parameters while Parameter handles keep circulating.","solutions":["Obtain the Parameter from the same query instance right before use: query.getParameterValue(query.getParameter(\"name\")) — or simpler, call query.getParameterValue(\"name\") / (int position) directly","Do not cache or share Parameter objects across query instances","Validate first: query.getParameters().contains(param) before calling getParameterValue"],"exampleFix":"// before\nParameter<?> p = otherQuery.getParameter( \"customerId\" );\nObject v = query.getParameterValue( p ); // not part of this Query\n\n// after\nObject v = query.getParameterValue( \"customerId\" );","handlingStrategy":"validation","validationCode":"if ( !query.getParameters().contains( param ) ) {\n    throw new IllegalArgumentException( \"Parameter \" + param + \" does not belong to this query\" );\n}\nObject v = query.getParameterValue( param );","typeGuard":"static boolean isParameterOf(jakarta.persistence.Query q, Parameter<?> p) {\n    return q.getParameters().contains( p );\n}","tryCatchPattern":null,"preventionTips":["Never cache or share Parameter objects across query instances","Use getParameterValue(String)/(int) instead of Parameter objects in application code","Keep (query, parameter) pairs together in one scope so mismatches are impossible"],"tags":["hibernate","query-parameters","jpa","illegalargument","parameter-binding"],"backgroundTag":"query-parameter-not-found","analyzedSha":"fad1729dce015f908198d57a8d80274a30f905a5","analyzedAt":"2026-08-22T04:13:57.527Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}