{"record":{"id":"92ff88b8b9b1b0a4","repo":"hibernate/hibernate-orm","slug":"received-arguments-length-arguments-for-paramet","errorCode":null,"errorMessage":"Received {arguments.length} arguments for {parameterCount} positional parameters","messagePattern":"Received (.+?) arguments for (.+?) positional parameters","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"hibernate-core/src/main/java/org/hibernate/query/internal/AbstractCommonQueryContract.java","lineNumber":1144,"sourceCode":"\t\t\tif ( multipleBinding( binding.getQueryParameter(), value ) ) {\n\t\t\t\tif ( value == null ) {\n\t\t\t\t\tthrow new IllegalArgumentException( \"Null value not allowed for multi-valued parameter '?\" + position + \"'\" );\n\t\t\t\t}\n\t\t\t\tsetParameterList( position, (Collection<?>) value );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbinding.setBindValue( value, resolveJdbcParameterTypeIfNecessary() );\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\t@Override\n\t@Nonnull\n\tpublic CommonQueryContractImplementor setParameters(@Nonnull Object... arguments) {\n\t\tfinal int parameterCount = getParameterMetadata().getOrdinalParameterLabels().size();\n\t\tif ( arguments.length != parameterCount ) {\n\t\t\tthrow new IllegalArgumentException(\n\t\t\t\t\t\"Received \" + arguments.length + \" arguments for \"\n\t\t\t\t\t\t\t+ parameterCount + \" positional parameters\"\n\t\t\t);\n\t\t}\n\t\tfor ( int i = 0; i < arguments.length; i++ ) {\n\t\t\tsetParameter( i + 1, arguments[i] );\n\t\t}\n\t\treturn this;\n\t}\n\n\t@Override\n\t@Nonnull\n\tpublic <P> CommonQueryContractImplementor setParameter(\n\t\t\tint position, @Nullable P value, @Nonnull Class<P> javaType) {\n\t\tfinal var javaDescriptor = getJavaType( javaType );\n\t\tif ( javaDescriptor == null ) {\n\t\t\tsetParameter( position, value );\n\t\t}","sourceCodeStart":1126,"sourceCodeEnd":1162,"githubUrl":"https://github.com/hibernate/hibernate-orm/blob/fad1729dce015f908198d57a8d80274a30f905a5/hibernate-core/src/main/java/org/hibernate/query/internal/AbstractCommonQueryContract.java#L1126-L1162","documentation":"Thrown by setParameters(Object... arguments): it counts the query's ordinal parameters via getParameterMetadata().getOrdinalParameterLabels().size() and requires arguments.length to match exactly, before binding position i+1 from argument i. The message reports both counts ('Received N arguments for M positional parameters'). It is a strict arity check — extra or missing arguments are rejected up front rather than partially bound.","triggerScenarios":"query.setParameters(1L, \"NEW\") on a query declaring three positional parameters (or one). Editing an HQL/native query to add/remove a '?' without updating the Object[] built by the caller. Mixing named parameters into the query — they are not counted as ordinal, so the argument count no longer matches. Varargs passthrough: setParameters(list.toArray()) where list size diverges.","commonSituations":"Query text maintained separately from binding code (property files, @Query annotations, SQL templates); version changes that alter parameter counting for native queries; copy-pasted DAO methods with one more argument than the query needs.","solutions":["Make argument count authoritative from metadata: build the array to length getParameterMetadata().getOrdinalParameterLabels().size() before calling setParameters","Prefer per-position binding (setParameter(1, v1)) or named parameters so arity drift fails at a precise, readable location","Add a unit test asserting arguments.length == expected positional count whenever the query string changes"],"exampleFix":"// before\nquery.setParameters( new Object[]{ customerId } );\n// 'Received 1 arguments for 2 positional parameters'\n\n// after\nint n = query.getParameterMetadata().getOrdinalParameterLabels().size();\nassert args.length == n;\nquery.setParameters( args );","handlingStrategy":"validation","validationCode":"int expected = query.getParameterMetadata().getOrdinalParameterLabels().size();\nif ( args.length != expected ) {\n    throw new IllegalArgumentException( \"Need \" + expected + \" args, got \" + args.length );\n}\nquery.setParameters( args );","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Derive argument arrays from metadata, not from hardcoded literals","Prefer setParameter(i, v) or named parameters in evolving code","Unit-test arity whenever a query string changes"],"tags":["hibernate","query-parameters","arity","positional-parameters","illegalargument"],"backgroundTag":"parameter-count-mismatch","analyzedSha":"fad1729dce015f908198d57a8d80274a30f905a5","analyzedAt":"2026-08-22T04:13:57.527Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}