{"record":{"id":"04d4d8a0215e62d3","repo":"hibernate/hibernate-orm","slug":"the-parameter-named-name-has-no-argument","errorCode":null,"errorMessage":"The parameter named '{name}' has no argument","messagePattern":"The parameter named '(.+?)' has no argument","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"hibernate-core/src/main/java/org/hibernate/query/internal/AbstractCommonQueryContract.java","lineNumber":954,"sourceCode":"\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\n\tpublic Object getParameterValue(@Nonnull String name) {\n\t\tsession.checkOpen( false );\n\t\tfinal var binding = getQueryParameterBindings().getBinding( name );\n\t\tif ( !binding.isBound() ) {\n\t\t\tthrow new IllegalStateException( \"The parameter named '\" + name + \"' has no argument\" );\n\t\t}\n\t\treturn binding.isMultiValued() ? binding.getBindValues() : binding.getBindValue();\n\t}\n\n\t@Override\n\t@Nullable\n\tpublic Object getParameterValue(int position) {\n\t\tsession.checkOpen( false );\n\t\tfinal var binding = getQueryParameterBindings().getBinding( position );\n\t\tif ( !binding.isBound() ) {\n\t\t\tthrow new IllegalStateException( \"The parameter at position\" + position + \" has no argument\" );\n\t\t}\n\t\treturn binding.isMultiValued() ? binding.getBindValues() : binding.getBindValue();\n\t}\n\n\tprivate <P> JavaType<P> getJavaType(Class<P> javaType) {\n\t\treturn getTypeConfiguration().getJavaTypeRegistry()\n\t\t\t\t.resolveDescriptor( javaType );","sourceCodeStart":936,"sourceCodeEnd":972,"githubUrl":"https://github.com/hibernate/hibernate-orm/blob/fad1729dce015f908198d57a8d80274a30f905a5/hibernate-core/src/main/java/org/hibernate/query/internal/AbstractCommonQueryContract.java#L936-L972","documentation":"Thrown (IllegalStateException) by getParameterValue(String name) when the named parameter exists but its binding is not bound: getQueryParameterBindings().getBinding(name) returns the binding object and !binding.isBound() is true. It is the read-before-write guard for named parameters; a completely unknown parameter name fails earlier inside getBinding(name) with a HibernateException instead.","triggerScenarios":"query.getParameterValue(\"status\") called before query.setParameter(\"status\", ...). Dynamic search builders where some named parameters are skipped when the corresponding filter is absent, followed by a blanket read of all parameter values.","commonSituations":"Optional-filter builders that forget to bind skipped parameters; debugging/logging code that dumps all parameter values; interplay with criteria/HQL parameter names changing after a query rewrite.","solutions":["Always bind a value — pass null explicitly if the filter is absent: query.setParameter(\"status\", valueOrNull) is accepted for single-valued parameters","Check bound-ness via query.isBound(query.getParameter(\"status\")) before reading","Bind defaults up front and overwrite later, so every named parameter is always bound"],"exampleFix":"// before\nObject v = query.getParameterValue( \"status\" ); // ISE: has no argument\n\n// after\nquery.setParameter( \"status\", statusOrNull );\nObject v = query.getParameterValue( \"status\" );","handlingStrategy":"validation","validationCode":"if ( !query.isBound( query.getParameter( name ) ) ) {\n    throw new IllegalStateException( \"Parameter '\" + name + \"' not bound yet\" );\n}\nObject v = query.getParameterValue( name );","typeGuard":null,"tryCatchPattern":"try {\n    return query.getParameterValue( name );\n} catch ( IllegalStateException e ) {\n    return null; // parameter never set\n}","preventionTips":["In dynamic filter builders, bind null or a default for every skipped named parameter","Run value-dumping loggers only after the binding stage","Keep named-parameter constants in one enum so names can't drift"],"tags":["hibernate","query-parameters","parameter-binding","illegalstate","named-parameters"],"backgroundTag":"parameter-value-not-bound","analyzedSha":"fad1729dce015f908198d57a8d80274a30f905a5","analyzedAt":"2026-08-22T04:13:57.527Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}