La persistance est du glue code.
Pas besoin de l'écrire.
HexaGlue génère les entités JPA, repositories Spring Data, mappers MapStruct et adapters de ports depuis votre modèle de domaine. Zéro code manuel pour la couche persistance.
5 types d'artefacts, synchronisés à chaque build
| Artefact | Quantité typique | Rôle |
|---|---|---|
| Entités JPA | 1 par agrégat | Classes annotées @Entity, @Table, @Column, prêtes pour Hibernate |
| Embeddables | 1 par Value Object persisté | @Embeddable pour les VO stockés en colonnes (ex: MoneyEmbeddable) |
| Repositories Spring Data | 1 par agrégat | Interfaces extends JpaRepository<T, ID> |
| Mappers MapStruct | 2 par agrégat (interface + impl) | Conversion bidirectionnelle domaine ↔ JPA |
| Adapters de port | 1 par driven port Repository | Implémente le port défini dans le domaine, wrappe le repository Spring Data |
Le nombre d'artefacts générés croît linéairement avec la taille du domaine. Pour un domaine de 8 agrégats (étude de cas e-commerce), HexaGlue produit 29 fichiers. Pour un domaine de 20 agrégats, attendez environ 70 fichiers. C'est du code que vous n'avez pas à écrire ni à maintenir.
Comment le domaine se transforme en JPA
| Concept domaine | Transformation |
|---|---|
| Aggregate Root | @Entity + @Table + Repository + Mapper + Adapter |
| Entity (enfant) | @Entity lié à l'agrégat parent via @JoinColumn |
| Value Object (multi-champs) | @Embeddable avec tous les champs mappés |
| Value Object (mono-champ) | Déplié vers le type primitif, pas d'embeddable |
| Identifier | Déplié vers le type wrappé pour @Id |
| Driven Port (Repository) | Interface JpaRepository + classe Adapter qui implémente le port |
Ces règles sont déterministes : pour un même modèle de domaine, HexaGlue produit toujours le même code JPA. Pas de magie, pas de convention cachée. La classification du type détermine entièrement ce qui est généré.
Votre code vs le code généré
// Pas d'annotation JPA, pas d'import infrastructurepublic class Order { private OrderId id; private CustomerId customerId; private List<OrderLine> lines; private Money total; private OrderStatus status;
public void addLine(Product product, int quantity) { // Logique métier uniquement }}@Entity@Table(name = "orders")public class OrderJpaEntity { @Id @GeneratedValue private Long id;
@Column(name = "customer_id") private Long customerId;
@OneToMany @JoinColumn(name = "order_id") private List<OrderLineJpaEntity> lines;
@Embedded private MoneyEmbeddable total;
@Enumerated(EnumType.STRING) private OrderStatus status;}
Du code généré qui vous appartient
Régénérer à chaque build
Mode par défaut. Les artefacts sont écrits dans target/ et régénérés à chaque mvn compile. Le code généré n'est pas versionné : il reste toujours synchronisé avec le domaine.
Committer dans votre code
Redirigez la sortie vers src/main/java via l'option outputDirectory. Le code généré devient partie intégrante de votre projet. Vous pouvez ensuite le modifier, l'enrichir ou désactiver la régénération.
Sur l'étude de cas e-commerce (8 agrégats), le plugin génère 29 fichiers de persistance. C'est du code que vous n'écrivez pas, que vous ne maintenez pas, et qui reste synchronisé avec votre domaine par construction.
Génération JPA vs SQL optimisé : un faux dilemme
HexaGlue optimise le coût humain
Moins de code à écrire, moins de code à maintenir, moins de bugs de câblage. Pour la grande majorité des applications métier (CRUD, back-office, SaaS, SI internes), les performances JPA standard sont largement suffisantes.
Le SQL manuel optimise le coût machine
Requêtes taillées pour le plan d'exécution, exploitation fine des index, contrôle total sur les jointures. Indispensable pour les chemins critiques à forte charge (trading, analytics, temps réel).
Les deux approches coexistent dans les architectures matures. HexaGlue couvre les 80 à 90 % de cas CRUD standard où la productivité prime sur la micro-optimisation.
Pour les requêtes critiques, Spring Data JPA offre @Query (JPQL), requêtes natives et projections : vous gardez le contrôle là où il compte, sans renoncer à l'automatisation partout ailleurs.
Besoin d'une génération sur mesure ?
Ce plugin démontre qu'il est possible de générer automatiquement toute la couche de persistance depuis le modèle de domaine. Bien qu'il couvre les patterns les plus courants, il ne prétend pas répondre à toutes les conventions et exigences de chaque entreprise.
Votre métier mérite toute votre attention.
Générez la persistance au build.
Voyez comment HexaGlue produit 29 fichiers de persistance à partir d'un domaine pur.