diff --git a/sprout-annotations/pom.xml b/sprout-annotations/pom.xml
index 07c7ca9..11fb9b4 100644
--- a/sprout-annotations/pom.xml
+++ b/sprout-annotations/pom.xml
@@ -44,6 +44,10 @@
+
+ org.springframework.boot
+ spring-boot-starter
+
jakarta.persistence
jakarta.persistence-api
@@ -55,6 +59,10 @@
javax.persistence-api
2.2
+
+ org.springframework.data
+ spring-data-commons
+
diff --git a/sprout-annotations/src/main/java/de/flix29/sprout/annotations/SproutResource.java b/sprout-annotations/src/main/java/de/flix29/sprout/annotations/SproutResource.java
index b1d1312..3f09214 100644
--- a/sprout-annotations/src/main/java/de/flix29/sprout/annotations/SproutResource.java
+++ b/sprout-annotations/src/main/java/de/flix29/sprout/annotations/SproutResource.java
@@ -35,7 +35,7 @@
/**
* If true, only read endpoints are generated for this resource. Note that this overrides the
* {@link SproutResource#include()} and {@link SproutResource#exclude()} options.
- * e.g., if set to true, no create, update, or delete endpoints will be generated.
+ * E.g., if set to true, no create, update, or delete endpoints will be generated.
* No matter what is set in include/exclude. You can still exclude read endpoints
* using {@link SproutResource#exclude()}.
* @return true if the resource is read-only
@@ -61,6 +61,14 @@
*/
boolean generateSwaggerDocs() default true;
+ /**
+ * If true, the generated Repository will be annotated with
+ * {@link org.springframework.data.repository.NoRepositoryBean}. By default, the repository is annotated with
+ * {@link org.springframework.stereotype.Repository}.
+ * @return true if the repository should be overridable.
+ */
+ boolean overrideRepository() default false;
+
/**
* Optional tag for the resource. This will be used in the Swagger documentation if enabled.
* @return the resource tag
diff --git a/sprout-processor/src/main/java/de/flix29/sprout/processor/SproutProcessor.java b/sprout-processor/src/main/java/de/flix29/sprout/processor/SproutProcessor.java
index a8dc8ba..4faa2f4 100644
--- a/sprout-processor/src/main/java/de/flix29/sprout/processor/SproutProcessor.java
+++ b/sprout-processor/src/main/java/de/flix29/sprout/processor/SproutProcessor.java
@@ -114,7 +114,8 @@ public boolean process(Set extends TypeElement> annotations, RoundEnvironment
Diagnostic.Kind.NOTE,
"[Sprout] Generating repository for " + simpleName
);
- var repository = SproutRepositoryGenerator.generateRepository(type, simpleName, entityName, idName, idType);
+ var repository = SproutRepositoryGenerator
+ .generateRepository(type, simpleName, entityName, idName, annotation.overrideRepository(), idType);
processingEnv.getMessager().printMessage(
Diagnostic.Kind.NOTE,
diff --git a/sprout-processor/src/main/java/de/flix29/sprout/processor/SproutRepositoryGenerator.java b/sprout-processor/src/main/java/de/flix29/sprout/processor/SproutRepositoryGenerator.java
index f96a31d..5ef1890 100644
--- a/sprout-processor/src/main/java/de/flix29/sprout/processor/SproutRepositoryGenerator.java
+++ b/sprout-processor/src/main/java/de/flix29/sprout/processor/SproutRepositoryGenerator.java
@@ -27,17 +27,29 @@ private SproutRepositoryGenerator() {
}
public static TypeSpec.Builder generateRepository(
- TypeElement type, String simpleName, String entityName, String idName, TypeMirror idType
+ TypeElement type,
+ String simpleName,
+ String entityName,
+ String idName,
+ boolean overrideRepository,
+ TypeMirror idType
) {
- return TypeSpec.interfaceBuilder("Sprout" + simpleName + "Repository")
+ var builder = TypeSpec.interfaceBuilder("Sprout" + simpleName + "Repository")
.addModifiers(Modifier.PUBLIC)
- .addAnnotation(ClassName.get("org.springframework.stereotype", "Repository"))
.addSuperinterface(ParameterizedTypeName.get(
ClassName.get(SPRING_DATA_JPA, "JpaRepository"),
ClassName.get(type),
TypeName.get(idType)
))
.addMethod(generateDeleteByIdMethod(entityName, idName, TypeName.get(idType)));
+
+ if (overrideRepository) {
+ builder.addAnnotation(ClassName.get("org.springframework.data.repository", "NoRepositoryBean"));
+ } else {
+ builder.addAnnotation(ClassName.get("org.springframework.stereotype", "Repository"));
+ }
+
+ return builder;
}
private static MethodSpec generateDeleteByIdMethod(String entityName, String idName, TypeName idType) {