2008-12-02 8 views
6

J'ai une classe qui est actuellement mappée en tant qu'entité dans une table de base de données en utilisant Hibernate. Cette classe doit être refactorisée en une classe abstraite contenant un champ commun à toutes ses sous-classes. J'utilise des annotations pour mapper des classes d'entités/relations de mise en veille prolongée.Refactorisation d'une entité Hibernate en sous-classes

Je voudrais des suggestions/variantes sur la façon de faire ce refactoring.

Aussi, quelques suggestions sur la façon de déplacer les données qui sont stockées dans la base de données (pour la future superclasse abstraite) dans l'une des sous-classes concrètes.

Répondre

9

D'abord, je vais créer la super-classe et ajouter les annotations nécessaires. Vous devez décider entre:

  • table par classe Stratégie
  • une seule table par classe Stratégie Hiérarchie
  • Stratégie d'une sous-classe

Je pense que la sous-classe A rejoint fonctionnera ici. Vous ajoutez l'annotation:

@Entity 
@Inheritance(strategy=InheritanceType.JOINED) 

Pour la super classe. Deuxièmement, je vais créer la (les) table (s) qui représentent les sous-classes. Rappelez-vous que ceux-ci auront seulement les colonnes qui sont uniques à la sous-classe, les colonnes qui sont partagées resteront dans la super classe. Ensuite, sélectionnez les lignes de la table super classe qui appartiennent à chaque sous-classe et déplacez les données.

Je ne sais pas si vous cherchez quelque chose de plus spécifique? Ce article explique l'héritage avec Hibernate.

+0

La liaison semble être rompue. Pour la documentation JBoss: http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#d0e1168 – rpr

+0

Je pense que la seule chose qui manque à cette réponse est la mention du 4ème choix de '@MappedSuperclass ', comme vu au 2.2.4.4. du document lié – Draken

Questions connexes