Plugin JPA
Suffixes, artefacts, options et routage multi-module.
Référence complète du plugin JPA HexaGlue : suffixes de nommage, artefacts générés, options d'auditing JPA et configuration multi-module.
Ajouter le plugin JPA
<plugin> <groupId>io.hexaglue</groupId> <artifactId>hexaglue-maven-plugin</artifactId> <version>6.0.0</version> <extensions>true</extensions> <configuration> <basePackage>com.acme.shop</basePackage> </configuration> <dependencies> <dependency> <groupId>io.hexaglue.plugins</groupId> <artifactId>hexaglue-plugin-jpa</artifactId> <version>3.0.0</version> </dependency> </dependencies></plugin>La génération s'exécute automatiquement lors de la phase generate-sources (mvn compile). Les artefacts sont générés dans target/generated-sources/hexaglue/.
Trois éléments clés dans cette configuration :
<extensions>true</extensions>: active le binding automatique aux phases Maven. Les goals HexaGlue se déclenchent sans configuration supplémentaire lors demvn compile.<basePackage>: package racine à analyser. Seules les classes de ce package et de ses sous-packages sont classifiées par HexaGlue.- Le plugin JPA est déclaré comme
<dependency>du plugin Maven, pas du projet. HexaGlue découvre automatiquement les plugins via le mécanisme JavaServiceLoader: il suffit de les ajouter ici pour qu'ils soient actifs.
Les projets utilisant Lombok sont pris en charge nativement depuis HexaGlue 6.0.0 : le delombok est injecté automatiquement avant l'analyse, aucune configuration spéciale n'est nécessaire côté plugin.
Le plugin génère du code qui utilise Spring Data JPA et MapStruct. Ajoutez ces dépendances à votre pom.xml :
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>1.6.3</version> </dependency></dependencies>Paramètres Maven
<configuration> du plugin Maven dans le pom.xml.Ces paramètres contrôlent le package analysé, le répertoire de sortie et le comportement en cas de types non classifiés.
Le paramètre
skip peut aussi être passé en ligne de commande via -Dhexaglue.skip=true.| Option | Défaut |
|---|---|
basePackage | (requis) |
outputDirectory | target/hexaglue/generated-sources |
skip | false |
skipValidation | false |
failOnUnclassified | false |
tolerantResolution | false |
Options YAML
hexaglue.yaml, placé à la racine du projet (à côté du pom.xml), centralise la configuration de HexaGlue et de tous ses plugins.Les options ci-dessous se configurent dans la section
plugins.io.hexaglue.plugin.jpa: du fichier YAML.Les paramètres Maven (
<configuration>) sont prioritaires sur les valeurs YAML.| Option | Type | Défaut |
|---|---|---|
entitySuffix | string | "Entity" |
embeddableSuffix | string | "Embeddable" |
repositorySuffix | string | "JpaRepository" |
adapterSuffix | string | "Adapter" |
mapperSuffix | string | "Mapper" |
tablePrefix | string | "" (vide) |
enableAuditing | boolean | false |
enableOptimisticLocking | boolean | false |
generateRepositories | boolean | true |
generateMappers | boolean | true |
generateAdapters | boolean | true |
generateEmbeddables | boolean | true |
infrastructurePackage | string | "{basePackage}.infrastructure.persistence" |
outputDirectory | string | (défaut global) |
targetModule | string | null |
Les fichiers générés sont systématiquement écrasés à chaque build. Si vous redirigez la sortie vers src/main/java via outputDirectory, toute modification manuelle des fichiers générés sera perdue au prochain mvn compile.
Un avertissement est émis dans les logs Maven lorsqu'un fichier existant est écrasé.
Ce qui est généré pour chaque agrégat
| Artefact | Exemple (Order) |
|---|---|
| Entité JPA | OrderEntity |
| Embeddable | MoneyEmbeddable |
| Repository | OrderJpaRepository |
| Mapper | OrderMapper |
| Adapter | OrderAdapter |
Les value objects simples (records à un seul champ comme record Quantity(int value)) ne génèrent pas d'embeddable. Ils sont automatiquement dépliés vers leur type primitif dans les entités JPA.
Tous les artefacts sont générés dans le package {basePackage}.infrastructure.persistence par défaut. Ce package est configurable via l'option infrastructurePackage.
Auditing et verrouillage optimiste
hexaglue.yaml.Quand enableAuditing: true
Chaque entité JPA générée inclut deux champs supplémentaires :
@CreatedDate@Column(updatable = false)private Instant createdAt;
@LastModifiedDateprivate Instant updatedAt;Quand enableOptimisticLocking: true
Chaque entité JPA générée inclut un champ version :
@Versionprivate Long version;Routage des artefacts en multi-module
- 1Configuration explicite :
targetModule: "banking-persistence"danshexaglue.yaml - 2Auto-routage par convention : si un seul module a le rôle
INFRASTRUCTURE, les artefacts y sont routés automatiquement - 3Défaut : si ni configuration ni convention ne s'appliquent, les artefacts sont écrits dans le répertoire de sortie par défaut
Si plusieurs modules ont le rôle INFRASTRUCTURE et qu'aucun targetModule n'est configuré, le plugin émet un avertissement et utilise le répertoire de sortie par défaut. Préférez la configuration explicite dans ce cas.
modules: banking-core: role: DOMAIN banking-persistence: role: INFRASTRUCTURE banking-service: role: APPLICATION
plugins: io.hexaglue.plugin.jpa: targetModule: "banking-persistence" generateRepositories: true generateAdapters: trueConfiguration complète
hexaglue.yaml. En pratique, seules les options dont vous souhaitez modifier la valeur par défaut sont nécessaires.plugins: io.hexaglue.plugin.jpa: # Suffixes de nommage entitySuffix: "JpaEntity" embeddableSuffix: "Embeddable" repositorySuffix: "JpaRepository" adapterSuffix: "RepositoryAdapter" mapperSuffix: "Mapper"
# Nommage des tables tablePrefix: "app_"
# Package cible infrastructurePackage: "com.acme.shop.infrastructure.persistence"
# Fonctionnalités JPA enableAuditing: true enableOptimisticLocking: true
# Contrôle de la génération generateRepositories: true generateMappers: true generateAdapters: true generateEmbeddables: true
# Multi-module (optionnel) # targetModule: "banking-persistence"Besoin d'une génération sur mesure ?
Ce plugin couvre les patterns de persistance les plus courants, mais chaque entreprise a ses propres conventions et exigences techniques. L'architecture ouverte d'HexaGlue vous permet de créer des plugins adaptés à votre stack.
Concentrez-vous sur le métier.
Générez la persistance en quelques lignes.
Voyez la génération en action sur un projet réel ou explorez toutes les options du plugin.