Skip to main content

Jpa Generator

Présentation

Le module JPA contient les générateurs pour écrire les fichiers suivants :

  • Un fichier de définition de classe pour chaque classe dans le modèle.
  • Un fichier de définition de classe pour chaque enum.
  • Un fichier d'interface DAO JpaRepository pour chacune des classes persistées du modèle.
  • Un (ou deux) fichier(s) par module avec les mappers des classes du module.
  • Un fichier de contrôleur pour chaque fichier d'endpoints dans le modèle, si les APIs sont générées en mode serveur.
  • Un fichier de client d'API pour chaque fichier d'endpoints dans le modèle, si les APIs sont générées en mode client.
  • Des fichiers de resources contenant les traductions (label) du modèle.
  • Les interfaces Hibernate Meta Models.

Sur toutes les classes et interfaces générées est ajoutée l'annotation @Generated("TopModel : https://github.com/klee-contrib/topmodel") pour permettre de retrouver la doc au cas où. Cette annotation peut être masquée avec le paramètre generatedHint.

Générateurs

La documentation est organisée par générateur logique. Chacune des pages ci-dessous décrit le comportement du ou des générateurs concernés ainsi que les options de configuration qui leur sont propres :

NomCondition d'activationObjets ciblésFichiers générés
JavaDtoGenToujoursClasses non abstraites, non persistées, qui ne sont pas des enumsPojo contenant les propriétés définies dans le modèle avec les annotations de validation
JdbcEntityGenuseJdbc: trueClasses non abstraites, persistées, qui ne sont pas en enum: truePojo contenant les propriétés définies dans le modèle, annotées avec les annotations de la persistance Jdbc
JpaDaoGendaosPath définiClasses persistées qui ne sont pas des enums (hors enum: class modifiable)Interface Repository permettant de requêter la classe en question
JpaEntityGenuseJdbc: falseClasses non abstraites, persistées, non readonlyPojo contenant les propriétés définies dans le modèle, annotées avec les annotations de la persistance JPA
JpaEnumEntityGenuseJdbc: falseClasses non abstraites, persistées, avec enum: class et readonlyPojo persisté avec des membres statiques représentant les entités décrites dans les values
JavaEnumClassPropGenuniqueValueGeneration autorise les enumsClasses non abstraites avec enum: classEnumération des valeurs possibles de la clé primaire de la classe
JavaEnumDtoGenToujoursClasses non abstraites, non persistées, avec enum: classPojo non persisté avec des membres statiques représentant les instances décrites dans les values
JavaEnumEnumGenToujoursClasses non abstraites avec enum: trueEnum contenant toutes les valeurs définies dans les values, dont la clé est la primaryKey ou la première propriété de la classe
JavaUniqValPropGenuniqueValueGeneration autorise les constantesClasses non abstraites qui ne sont pas en enum: trueClasse utilitaire de constantes public static final exposant les valeurs connues d'une propriété à clé d'unicité
JpaInterfaceGenToujoursClasses avec abstract: trueInterface ne contenant que des getters des propriétés définies dans le modèle
SpringDataFlowGendataFlowsPath définiDataflowsDéfinition d'un job par module, et d'un step par dataFlow
FeignClientApiGenapiGeneration: client && clientApiGeneration: feignClientEndpointsInterface contenant les annotations nécessaires à la construction par Feign d'une API cliente
SpringApiClientGenapiGeneration: client && clientApiGeneration: restClientEndpointsInterface contenant les annotations @XXXExchange pour la génération d'un client API via HttpServiceProxyFactory
SpringRestTemplateGenapiGeneration: client && clientApiGeneration: restTemplateEndpointsClasse abstraite définissant les méthodes permettant d'appeler une API externe à l'aide d'un RestTemplate Spring
SpringApiServerGenapiGeneration: serverEndpointsInterface définissant les méthodes annotées permettant de définir une API serveur. L'implémentation est à la charge du développeur
JpaMapperGeneratorToujoursMappersClasse statique contenant des méthodes statiques, correspondant aux mappers définis dans le modèle
JpaResourceGenresourcesPath définiClasses qui contiennent des labels ou des values qui ont des defaultPropertyFichiers de resource .properties dans les différentes langues de l'application
JpaMetaModelGenmetaModel: true && useJdbc: falseClasses persistées non abstraites qui ne sont pas en enum: trueClasses représentant le métamodèle des entités persistées. Une classe par entité avec le suffixe _

Pour la configuration transverse (options globales qui ne sont pas rattachées à un générateur particulier), consultez la page Configuration.

Dépendances

Modèle

Le modèle généré par TopModel dépend d'une api de persistence. Par défaut, c'est l'API de persistence javax qui est utilisée, mais le mode jakarta est aussi disponible.

La validation est gérée par le package jakarta.validation-api, dont les imports changent entre la version 2 et la version 3.

Javax (spring-boot < v3)

<!-- https://mvnrepository.com/artifact/javax.persistence/javax.persistence-api -->
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
</dependency>

<!-- https://mvnrepository.com/artifact/jakarta.validation/jakarta.validation-api -->
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
</dependency>

Jakarta (spring-boot > v3)

<!-- https://mvnrepository.com/artifact/jakarta.persistence/jakarta.persistence-api -->
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<version>3.1.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/jakarta.validation/jakarta.validation-api -->
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
</dependency>

Endpoints

Actuellement, la seule génération d'endpoint cliente et serveur qui est gérée passe par les API de Spring-web :

<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>

Si l'option openApiAnnotations est activée, les annotations de cette librairie sont utilisées :

<!-- https://mvnrepository.com/artifact/io.swagger.core.v3/swagger-annotations-jakarta -->
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-annotations-jakarta</artifactId>
</dependency>

Version Java

Le code Java généré est compatible avec toutes les versions de Java postérieures à Java 11.

Configuration Maven

Pour ajouter les sources du dossier javagen au build, vous pouvez utiliser la configuration suivante :

<!-- Ajout des sources générées -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>src/main/javagen</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>

Snippets

Des snippets prêts à l'emploi pour les domaines et les décorateurs couramment utilisés avec le générateur JPA sont disponibles sur la page Snippets.