2010-05-17 2 views
2

Dans ma base de données, il y a deux trois tables. La première, table RÉSUMÉ, contient trois colonnesTable de mixage par sous-classe et par hiérarchie en mode hibernation

id, type, someText 

Ce tableau contient toutes les informations abstraites de la classe abstraite abstraite. Maintenant, les deux tables CONCRETEONE et CONCRETETWO contiennent toutes les informations pour les classes concrètes de concreteOne et concreteTwo. Maintenant, je sais que je pourrais utiliser la stratégie table by subclass d'hibernate pour créer un mapping avec l'héritage. Mais comme j'ai une colonne qui marque le type de l'implémentation concrète, pourrait-il être possible de créer un comportement mixte comme une table par stratégie de sous-classe avec un discriminateur?

+0

pourquoi n'allez-vous pas avec la "table par sous-classe"? – cherouvim

+0

Peut-être que cela pourrait diminuer la surcharge de performance car théoriquement les jointures externes pourraient être évitées lors de l'interrogation de la classe abstraite. –

Répondre

2

Les stratégies de mappage d'héritage Hibernate doivent être sélectionnées en fonction de la conception de la base de données.

Si vous ne pouvez pas modifier la conception de la base de données, maintenez la meilleure stratégie pour la conception de base de données actuelle. i.e tableau par stratégie de sous-classe.

Si vous pouvez changer la conception de la base de données, oubliez Hibernate en premier, concentrez-vous sur la conception de la table DB qui convient le mieux à votre application. Quelques facteurs à considérer, a) Comment les données seront-elles récupérées/utilisées? Disons, si la plupart du temps, la logique ne concerne pas la différenciation CONCRETEONE et CONCRETETWO, alors pas de point de départ pour les sous-tables. b) Combien de colonnes additionnelles sont nécessaires pour CONCRETEONE et CONCRETETWO? Si vous avez tellement de colonnes spécifiques aux sous-tables, alors "Table per class herarchy" n'est pas une bonne idée. c) Les colonnes spécifiques aux sous-tables ne doivent pas être "NOT-NULL".

Espérons que cela aidera. Pourquoi avez-vous besoin du discriminateur?

+0

a) peut-être vous avez raison et il arrivera très rarement que je veux interroger pour la classe abstraite b) de nombreuses colonnes supplémentaires, donc je demande c) bien Je jette un oeil à http: //www.javalobby. org/java/forums/t18300.html, peut-être cela va m'aider –

Questions connexes