Bonjour,
pourriez-vous svp me confirmer la démarche pour ce contexte d'utilisation des générateurs d'identifiant :
la clé primaire de plusieurs entités de ma ma base de données est issu d'une incrémentation manuelle d'un entier qui est stockée dans une table dédiée à cela.
Cette table est donc similaire à un "gestionnaire de séquences" (sous MySQL).
Pour identifier le nouvel incrément à utiliser lors d'une insertion dans l'une des tables citées ci-dessus, deux critères sont nécessaire :
le nom de l'entité
un numéro de "segment"
Autrement dit le schéma de la table stockant les séquences ressemble à ceci:
"entity_name" | "segment" | "new_increment"
________________________________________
X | a | 10
X | b | 5
Y | a | 2
Z | a | 3
Donc à chaque nouvelle entité, j'aimerai qu'Hibernate aille rechercher la valeur de la PK dans cette table (avec deux criètres, entity_name et segment) et que "new_increment" soit incrémenté
Je me suis donc documenté mais j'avoue avoir du mal à bien retrouver l'information qui me faut.
Je suis tombé sur ceci:
org.hibernate.id.enhanced.TableGenerator
Le problème, c'est qu'on ne peut donner qu'un seul critère de recherche dans la table qui stocke les séquences, alors que j'en possède deux (entity_name et segment)
D'où ma question, existe-t'il une implémentation de générateur d'IDs dans Hibernate qui puisse répondre à ce besoin?
Dans le cas contraire, si je ne me trompe, je dois implémenter une classe héritant de IdentifierGenerator et redéfinir la méthode generate qui reçoit la session et l'objet : j'effectue alors moi même les requêtes vers ma table séquence et je retourne le nouvel id.
Donc en résumé, si Hibernate ne propose pas de générateur collant à mon besoin, mieux vaut-il :
- implémenter une classe génératrice
- ou passer en mode "assigned" et laisser la couche "métier" le soin d'attribuer lui même l'identifiant aux objets qu'il souhaite persister?
Je vous remercie de votre aide.
Bonne journée
Partager