{"record":{"id":"93f220c0533c3503","repo":"quarkusio/quarkus","slug":"method-method-of-repository-repository-has-in-93f220","errorCode":null,"errorMessage":"Method ${method} of Repository ${repository}has invalid parameters - only a single parameter of type Sort can be specified","messagePattern":"Method (.+?) of Repository (.+?)has invalid parameters - only a single parameter of type Sort 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/DerivedMethodsAdder.java","lineNumber":122,"sourceCode":"            List<Integer> queryParameterIndexes = new ArrayList<>(parameters.size());\n            Integer pageableParameterIndex = null;\n            Integer sortParameterIndex = null;\n            Integer dynamicProjectionParameterIndex = null;\n            for (int i = 0; i < parameters.size(); i++) {\n                Type paramType = parameters.get(i);\n                DotName parameterType = paramType.name();\n                parameterTypesStr[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 if (isDynamicProjectionParameter(paramType, method)) {\n                    if (dynamicProjectionParameterIndex != null) {\n                        throw new IllegalArgumentException(\"Method \" + method.name() + \" of Repository \" + repositoryClassInfo\n                                + \"has invalid parameters - only a single dynamic projection parameter of type \"\n                                + DotNames.CLASS + \" can be specified\");\n                    }\n                    dynamicProjectionParameterIndex = i;\n                } else {\n                    queryParameterIndexes.add(i);\n                }\n            }\n\n            MethodNameParser.Result parseResult = methodNameParser.parse(method);\n            if (parseResult.getParamCount() != queryParameterIndexes.size()) {","sourceCodeStart":104,"sourceCodeEnd":140,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/spring-data-jpa/deployment/src/main/java/io/quarkus/spring/data/deployment/generate/DerivedMethodsAdder.java#L104-L140","documentation":"A derived repository method may take at most one Sort parameter. DerivedMethodsAdder.add throws this error at build time when two or more parameters of type org.springframework.data.domain.Sort appear in the method signature, since sorting can only be applied once per generated query.","triggerScenarios":"Declaring e.g. List<User> findByName(String n, Sort s1, Sort s2); the second Sort parameter triggers the throw.","commonSituations":"Merging two method signatures during refactor; copying a signature that passed primary and secondary sort objects; confusion between Sort and Order criteria.","solutions":["Keep only one Sort parameter and combine criteria: Sort.by(Order.desc(\"a\"), Order.asc(\"b\"))","Remove redundant Sort parameters","Use Pageable (which carries a Sort) if paging plus sorting is needed","Add @Query with explicit ORDER BY if sorting is fixed"],"exampleFix":"// before\nList<User> findByName(String n, Sort s1, Sort s2);\n\n// after\nList<User> findByName(String n, Sort s); // Sort.by(desc(\"age\"), asc(\"name\"))","handlingStrategy":"validation","validationCode":"long sortCount = Arrays.stream(m.getParameterTypes())\n    .filter(t -> Sort.class.isAssignableFrom(t)).count();","typeGuard":null,"tryCatchPattern":null,"preventionTips":["One Sort parameter max per method","Combine multiple orders with Sort.by(...)","Prefer Pageable when both paging and sorting are needed"],"tags":["quarkus","spring-data-jpa","build-time","sort","method-signature"],"backgroundTag":"invalid-repository-method-signature","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"}