diff --git a/TopModel.Generator.Jpa/JpaConfig.cs b/TopModel.Generator.Jpa/JpaConfig.cs
index 1327b233..a08157d3 100644
--- a/TopModel.Generator.Jpa/JpaConfig.cs
+++ b/TopModel.Generator.Jpa/JpaConfig.cs
@@ -99,6 +99,16 @@ public class JpaConfig : GeneratorConfigBase
///
public bool UseJdbc { get; set; } = false;
+ ///
+ /// Génération d'interface Abstract avec @NoRepositoryBean permettant de mettre à jour le code généré.
+ ///
+ public bool DaosAbstract { get; set; } = false;
+
+ ///
+ /// Précise l'interface des Daos générés.
+ ///
+ public string? DaosInterface { get; set; }
+
///
/// Indique s'il faut ajouter les mappers en tant méthode ou constructeur dans les classes qui les déclarent.
///
diff --git a/TopModel.Generator.Jpa/JpaDaoGenerator.cs b/TopModel.Generator.Jpa/JpaDaoGenerator.cs
index 85a64892..9377a732 100644
--- a/TopModel.Generator.Jpa/JpaDaoGenerator.cs
+++ b/TopModel.Generator.Jpa/JpaDaoGenerator.cs
@@ -26,16 +26,17 @@ protected override bool FilterClass(Class classe)
protected override string GetFileName(Class classe, string tag)
{
+ string path = Config.DaosAbstract ? $"Abstract{classe.NamePascal}DAO.java" : $"{classe.NamePascal}DAO.java";
return Path.Combine(
Config.OutputDirectory,
Config.ResolveVariables(Config.DaosPath!, tag, module: classe.Namespace.Module).ToFilePath(),
- $"{classe.NamePascal}DAO.java");
+ path);
}
protected override void HandleClass(string fileName, Class classe, string tag)
{
// Ne génère le DAO qu'une seule fois
- if (File.Exists(fileName))
+ if (!Config.DaosAbstract && File.Exists(fileName))
{
return;
}
@@ -64,7 +65,30 @@ protected override void HandleClass(string fileName, Class classe, string tag)
pk = classe.PrimaryKey.Count() > 1 ? $"{classe.NamePascal}.{classe.NamePascal}Id" : Config.GetType(classe.PrimaryKey.Single());
}
- fw.WriteLine($"public interface {classe.NamePascal}DAO extends {(classe.Reference || Config.UseJdbc ? "CrudRepository" : "JpaRepository")}<{classe.NamePascal}, {pk}> {{");
+ string daosInterface;
+ if (Config.DaosInterface != null)
+ {
+ daosInterface = $"{Config.DaosInterface}<{classe.NamePascal}, {pk}>";
+ }
+ else if (classe.Reference || Config.UseJdbc)
+ {
+ daosInterface = $"CrudRepository<{classe.NamePascal}, {pk}>";
+ }
+ else
+ {
+ daosInterface = $"JpaRepository<{classe.NamePascal}, {pk}>";
+ }
+
+ if (Config.DaosAbstract)
+ {
+ fw.WriteLine("@NoRepositoryBean");
+ fw.WriteLine($"interface Abstract{classe.NamePascal}DAO extends {daosInterface} {{");
+ }
+ else
+ {
+ fw.WriteLine($"interface {classe.NamePascal}DAO extends {daosInterface} {{");
+ }
+
fw.WriteLine();
fw.WriteLine("}");
}
@@ -75,11 +99,12 @@ private void WriteImports(JavaWriter fw, Class classe, string tag)
{
classe.GetImport(Config, tag)
};
- if (Config.UseJdbc)
+
+ if (Config.DaosInterface != null)
{
- imports.Add("org.springframework.data.repository.CrudRepository");
+ // pas besoin d'import
}
- else if (classe.Reference)
+ else if (classe.Reference || Config.UseJdbc)
{
imports.Add("org.springframework.data.repository.CrudRepository");
}
@@ -88,6 +113,11 @@ private void WriteImports(JavaWriter fw, Class classe, string tag)
imports.Add("org.springframework.data.jpa.repository.JpaRepository");
}
+ if (Config.DaosAbstract)
+ {
+ imports.Add("org.springframework.data.repository.NoRepositoryBean");
+ }
+
fw.AddImports(imports);
}
}
\ No newline at end of file
diff --git a/TopModel.Generator.Jpa/jpa.config.json b/TopModel.Generator.Jpa/jpa.config.json
index 8fe6f1cf..c290866a 100644
--- a/TopModel.Generator.Jpa/jpa.config.json
+++ b/TopModel.Generator.Jpa/jpa.config.json
@@ -133,6 +133,16 @@
"description": "Générer les entités en mode JDBC",
"default": "false"
},
+ "daosAbstract": {
+ "type": "boolean",
+ "description": " Génération d'interface Abstract avec @NoRepositoryBean permettant de mettre à jour le code généré",
+ "default": "false"
+ },
+ "daosInterface": {
+ "type": "string",
+ "description": "Précise l'interface des Daos générés.",
+ "default": "false"
+ },
"mappersInClass": {
"type": "boolean",
"description": "Indique s'il faut ajouter les mappers en tant méthode ou constructeur dans les classes qui les déclarent"