En d'autres termes: comment modéliser/mapper une classe/table enfant fortement réutilisée vers plusieurs entités parentes?Hibernate meilleure approche pour une classe Java et plusieurs tables?
J'ai plusieurs types d'entités, chacune étant dans persista sa propre table:
classe A -> Tableau A classe B -> tableau B ....
Maintenant, je dois faire chacune de ces classes est le parent d'une collection enfant unidirectionnelle 1: M. La collection est un historique des approbations que l'entité a acquises au fil du temps. La classe de domaine enfant est appelée "ApprovalItem". La classe d'approbation est exactement la même pour tous les types de parents.
Quelle est la meilleure façon de mapper cela? Si je crée une seule table pour contenir tous les ApprovalItems, alors je ne peux pas appliquer une relation FK au PK de l'entité et/ou il me reste une mauvaise conception de base de données. En revanche, je pourrais créer une table ApprovalIems pour chaque type d'entité (par exemple, A_ApprovalItems, B_ApprovalItems, etc.)
D'autre part, je pourrais créer une table ApprovalIems pour chaque type d'entité (par exemple, A_ApprovalItems, B_ApprovalItems, etc.). Cela semble être un bon schéma du côté de la base de données, mais il semble que je doive créer des classes de domaine séparées en Java pour chaque approbation d'entité (par exemple, classe AAprrovalItem, classe BApprovalItem, etc.). Cela semble beaucoup de tracas et de complexité pour créer autant de nouvelles classes en Java qui ne font rien d'autre que de me permettre de mettre différentes annotations de mapping JPA.
Existe-t-il une technique de mappage dans Hibernate qui me permettra d'avoir une classe dans la carte Java à plusieurs tables différentes en fonction de qui est le propriétaire parent de la collection?
Cela semble parfait du côté Java, mais pouvez-vous préciser à quoi ressemble le schéma dans la base de données? Je suppose qu'il existe une table de jointure entre les tables d'entités et la table approvalitem - est-ce exact? – HDave
@HDave Oui, nous avons trois classes: ClassA, ClassB et ApprovalItem; et cinq tables: CLASSA, CLASSB, APPROVALITEM, CLASSA_APPROVALITEM (Il prend soin de lier les instances ClassA et ApprovalItem) CLASSB_APPROVALITEM (Il prend soin de lier les instances ClassB et ApprovalItem) –
100% awesome goodness .... merci. – HDave