{"record":{"id":"4c2a3a302c569557","repo":"quarkusio/quarkus","slug":"method-method-name-of-repository-repository","errorCode":null,"errorMessage":"Method ${method.name()} of Repository ${repositoryClassInfo}has invalid parameters - only a single parameter of type${DotNames.SPRING_DATA_PAGEABLE} can be specified","messagePattern":"Method (.+?) of Repository (.+?)has invalid parameters - only a single parameter of type(.+?) can be specified","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"extensions/spring-data-jpa/deployment/src/main/java/io/quarkus/spring/data/deployment/generate/CustomQueryMethodsAdder.java","lineNumber":128,"sourceCode":"                    || queryString.startsWith(\"from\") || queryString.startsWith(\"FROM\")\n                    || queryString.startsWith(\"delete\") || queryString.startsWith(\"DELETE\")\n                    || queryString.startsWith(\"update\") || queryString.startsWith(\"UPDATE\"))) {\n                throw new IllegalArgumentException(\"Unsupported query type in @Query. \" +\n                        \"Offending method is \" + methodName + \" of Repository \" + repositoryName);\n            }\n\n            List<Type> methodParameterTypes = method.parameterTypes();\n            String[] methodParameterTypesStr = new String[methodParameterTypes.size()];\n            List<Integer> queryParameterIndexes = new ArrayList<>(methodParameterTypes.size());\n            Integer pageableParameterIndex = null;\n            Integer sortParameterIndex = null;\n            for (int i = 0; i < methodParameterTypes.size(); i++) {\n                DotName parameterType = methodParameterTypes.get(i).name();\n                methodParameterTypesStr[i] = parameterType.toString();\n                if (DotNames.SPRING_DATA_PAGEABLE.equals(parameterType)\n                        || DotNames.SPRING_DATA_PAGE_REQUEST.equals(parameterType)) {\n                    if (pageableParameterIndex != null) {\n                        throw new IllegalArgumentException(\"Method \" + method.name() + \" of Repository \" + repositoryClassInfo\n                                + \"has invalid parameters - only a single parameter of type\" + DotNames.SPRING_DATA_PAGEABLE\n                                + \" can be specified\");\n                    }\n                    pageableParameterIndex = i;\n                } else if (DotNames.SPRING_DATA_SORT.equals(parameterType)) {\n                    if (sortParameterIndex != null) {\n                        throw new IllegalArgumentException(\"Method \" + method.name() + \" of Repository \" + repositoryClassInfo\n                                + \"has invalid parameters - only a single parameter of type\" + DotNames.SPRING_DATA_SORT\n                                + \" can be specified\");\n                    }\n                    sortParameterIndex = i;\n                } else {\n                    queryParameterIndexes.add(i);\n                }\n            }\n\n            // go through the method annotations, find the @Param annotation on parameters\n            // and map the name to the method param index","sourceCodeStart":110,"sourceCodeEnd":146,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/spring-data-jpa/deployment/src/main/java/io/quarkus/spring/data/deployment/generate/CustomQueryMethodsAdder.java#L110-L146","documentation":"A custom @Query repository method may accept at most one Pageable/PageRequest parameter. Passing a second parameter of type Pageable (or PageRequest) makes parameter binding ambiguous, so the build fails with this IllegalArgumentException.","triggerScenarios":"Declaring a repository method with two parameters where both are org.springframework.data.domain.Pageable or PageRequest, e.g. findAll(Pageable p1, Pageable p2) or a @Query method with duplicate pagination parameters.","commonSituations":"Copy-paste duplication of a pagination parameter; intent to support 'secondary' paging or keyset paging using two Pageables; accidentally importing PageRequest for one param and Pageable for another while semantically meaning the same thing twice.","solutions":["Keep exactly one Pageable/PageRequest parameter and remove the duplicate","If two different pagination behaviors are needed, encode the second one into the query parameters instead (e.g. explicit offset/limit columns or a different method signature)","Use Sort parameters (a single one) if only ordering differs, not two Pageables","Split into two distinct repository methods with clear names"],"exampleFix":"// before\nList<User> findUsers(Pageable page, Pageable anotherPage);\n// after\nList<User> findUsers(Pageable page);","handlingStrategy":"validation","validationCode":"long pageableCount = Arrays.stream(method.getParameterTypes())\n    .filter(t -> Pageable.class.isAssignableFrom(t))\n    .count();\nif (pageableCount > 1) throw new IllegalArgumentException(\"At most one Pageable allowed\");","typeGuard":null,"tryCatchPattern":"try {\n    compile();\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().contains(\"only a single parameter of type\")) {\n        log.error(\"Remove duplicate Pageable/PageRequest parameter\");\n    }\n    throw e;\n}","preventionTips":["Declare at most one Pageable/PageRequest per repository method","Use Sort (single) for ordering needs","Encode secondary paging into query parameters","Review signatures after copy-paste"],"tags":["spring-data-jpa","quarkus","pagination","pageable","method-signature"],"backgroundTag":"duplicate-pageable-parameter","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}