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>5.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>2.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.
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>Toutes les options
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" |
targetModule | string | null |
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"Votre domaine mérite mieux que des annotations JPA.
Configurez la génération en quelques lignes.
Voyez la génération en action sur un projet réel ou explorez toutes les options du plugin.