Aller au contenu principal

Configuration

Cette page documente les options de configuration transverses du module JPA, c'est-à-dire celles qui ne sont pas rattachées à un générateur en particulier. Pour les options propres à chaque générateur, consultez la page correspondante :

Compatibilité avec les options TopModel

Le générateur JPA est compatible avec les options globales de TopModel :

  • preservePropertyCasing : Lorsque cette option est activée dans la configuration TopModel, les noms de propriétés conservent leur casse d'origine (camelCase, PascalCase, etc.) au lieu d'être normalisés. Le générateur JPA adapte automatiquement les noms des getters et setters en conséquence.

Templating commun

La plupart des propriétés de chemin acceptent un templating via les variables suivantes :

  • {app} : nom de l'application
  • {module} : module du fichier courant
  • Variables personnalisées définies dans la configuration

Le chemin des fichiers cibles sera calculé en remplaçant les . et le : par des / dans ces valeurs, tandis que le nom du package des classes générées sera calculé en prenant ce qui est à droite du dernier : et en remplaçant tous les / par des ..

De nombreuses propriétés supportent également des variables par tag, ce qui permet de générer plusieurs fois la même chose si un fichier est associé à plusieurs tags.

Options transverses

rootModule

Définition du module racine, pour les différents regroupements à faire dessus (fichiers de traductions, noms de clients Feign, etc.). Cette propriété est utilisée notamment pour :

  • Déterminer le nom des fichiers de ressources générés (fichiers .properties de traduction)
  • Définir l'attribut name de l'annotation @FeignClient lors de la génération de clients Feign

Templating: {module}

Valeur par défaut: {module:head}

generatedHint

Option pour générer l'annotation @Generated("TopModel : https://github.com/klee-contrib/topmodel") sur l'ensemble des classes et interfaces générées. Cette annotation permet de retrouver rapidement la documentation de TopModel pour les développeurs qui tomberaient sur du code généré sans contexte.

Valeur par défaut: true

useJdbc

Génération en mode JDBC au lieu de JPA. Dans ce mode, les entités sont générées sans annotations JPA, mais avec des annotations JDBC simples. Les DAOs héritent de CrudRepository au lieu de JpaRepository.

Valeur par défaut: false

Note : En mode JDBC, les enums ne sont pas supportés de la même manière qu'en mode JPA. Les classes avec des valeurs ne peuvent pas utiliser le mode enum.

identity

Options de génération de la séquence.

  • mode

    Mode de génération de la séquence. Les valeurs possibles sont :

    • "none" : Aucune génération automatique
    • "sequence" : Utilise une séquence de base de données (nécessite increment et optionnellement start)
    • "identity" : Utilise l'auto-incrémentation de la base de données (par défaut)
    • "uuid" : Génère un UUID pour la clé primaire

    Valeur par défaut: identity

  • increment

    Incrément de la séquence générée.

  • start

    Début de la séquence générée.

Utilisation combinée avec le générateur postgresql

Le mode de génération par défaut des générateurs ne crée pas de séquence, mais des colonnes auto-générées avec identity. Malheureusement, le batch insert de JDBC ne fonctionne pas correctement avec ce mode de génération d'ID. Il est donc recommandé d'utiliser le mode sequence du générateur PostgreSQL.

Le mode sequence dans la configuration JPA et dans la configuration PostgreSQL se déclare de la même manière :

## Configuration jpa et proceduralSql
identity:
increment: 50
start: 1000
mode: sequence

Exemple de configuration

Voici un exemple de configuration complet du générateur JPA, mixant plusieurs générateurs :

jpa:
- tags:
- dto
- entity
outputDirectory: ./jpa/src/main/javagen # Dossier cible de la génération
entitiesPath: topmodel/exemple/name/entities # Dossier cible des entités persistées
daosPath: topmodel/exemple/name/daos # Dossier cible des DAO
dtosPath: topmodel/exemple/name/dtos # Dossier cible des objets non persistés
enumsPath: topmodel/exemple/name/enums # Dossier cible des enums
apiPath: topmodel/exemple/name/api # Dossier cible des API
apiGeneration: Server # Mode de génération de l'API (Client ou Server)
fieldsEnum: ["persisted"] # Classes dans lesquelles le générateur doit ajouter une enum des champs
fieldsEnumInterface: topmodel.exemple.utils.IFieldEnum<> # Interface dont doivent hériter ces enums
identity:
mode: sequence
increment: 50
start: 1000