{"record":{"id":"7808bca03d2f4857","repo":"quarkusio/quarkus","slug":"repository-repository-does-not-specify-id-and-o","errorCode":null,"errorMessage":"Repository ${repository} does not specify ID and/or Entity type","messagePattern":"Repository (.+?) does not specify ID and/or Entity type","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"extensions/spring-data-jpa/deployment/src/main/java/io/quarkus/spring/data/deployment/generate/SpringDataRepositoryCreator.java","lineNumber":171,"sourceCode":"            if (!(types.get(0) instanceof ClassType)) {\n                throw new IllegalArgumentException(\n                        \"Entity generic argument of \" + repositoryToImplement + \" is not a regular class type\");\n            }\n            DotName newEntityDotName = types.get(0).name();\n            if ((entityDotName != null) && !newEntityDotName.equals(entityDotName)) {\n                throw new IllegalArgumentException(\"Repository \" + repositoryToImplement + \" specifies multiple Entity types\");\n            }\n            entityDotName = newEntityDotName;\n\n            DotName newIdDotName = types.get(1).name();\n            if ((idDotName != null) && !newIdDotName.equals(idDotName)) {\n                throw new IllegalArgumentException(\"Repository \" + repositoryToImplement + \" specifies multiple ID types\");\n            }\n            idDotName = newIdDotName;\n        }\n\n        if (idDotName == null || entityDotName == null) {\n            throw new IllegalArgumentException(\n                    \"Repository \" + repositoryToImplement + \" does not specify ID and/or Entity type\");\n        }\n\n        return new AbstractMap.SimpleEntry<>(idDotName, entityDotName);\n    }\n\n    private void createCustomImplFields(io.quarkus.gizmo2.creator.ClassCreator repositoryImpl,\n            List<DotName> customInterfaceNamesToImplement,\n            IndexView index, Map<String, FieldDesc> customImplNameToFieldDescriptor) {\n        Set<String> customImplClassNames = new HashSet<>(customInterfaceNamesToImplement.size());\n\n        // go through the interfaces and collect the implementing classes in a Set\n        // this is done because it is possible for an implementing class to implement multiple fragments\n        for (DotName customInterfaceToImplement : customInterfaceNamesToImplement) {\n            customImplClassNames\n                    .add(FragmentMethodsUtil.getImplementationDotName(customInterfaceToImplement, index).toString());\n        }\n","sourceCodeStart":153,"sourceCodeEnd":189,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/spring-data-jpa/deployment/src/main/java/io/quarkus/spring/data/deployment/generate/SpringDataRepositoryCreator.java#L153-L189","documentation":"After walking the repository hierarchy, Quarkus requires both the entity and ID type parameters to be resolvable. If either is missing (null), the repository did not extend any Spring Data repository interface with proper <Entity, ID> generics, so no CRUD methods can be generated.","triggerScenarios":"A repository interface declares no generics or leaves them unbound (raw type), e.g. interface MyRepo extends Repository; or it extends only a custom fragment interface without any Spring Data base interface.","commonSituations":"Raw-type usage after refactoring; forgetting to extend CrudRepository/Repository/JpaRepository; a generic base whose type parameters were never concretized.","solutions":["Extend a Spring Data repository interface with explicit generics: interface UserRepo extends CrudRepository<User, Long>","Ensure both the entity and ID type arguments are concrete classes","Remove raw-type declarations of Repository/CrudRepository"],"exampleFix":"// before\npublic interface UserRepo extends Repository { }\n// after\npublic interface UserRepo extends CrudRepository<User, Long> { }","handlingStrategy":"validation","validationCode":"// A repository must extend a Spring Data base interface with concrete generics\nif (!(repo instanceof CrudRepository) && !(repo instanceof Repository))\n    throw new IllegalStateException(\"Repository must extend CrudRepository/Repository with <Entity, ID>\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always extend CrudRepository/Repository/JpaRepository with explicit type arguments","Never declare raw-type repositories","Combine custom fragments with a Spring Data base interface"],"tags":["quarkus","spring-data-jpa","generics","build-time"],"backgroundTag":"invalid-generic-type-parameter","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}