HIbernate charges de sous-classes avec des classes
Je suis de l'utilisation d'Hibernate pour se connecter à ma base de données.
J'ai une structure d'héritage dans mon application.Le problème est que lorsque je fais une requête comme "de l'Animal", il fait une jointure externe gauche pour la classe Animal,de ses sous-classes et de toutes les associations pour les Animaux et de ses sous-classes.
Comment puis-je éviter cette situation.Je veux charger les données que lorsque je le spécifier par le biais d'un fetchmode dans mes critères de requête?
J'ai le même problème, j'ai simplement supposé qu'il a à faire, que les tables n'est pas très grand, je n'ai pas pris la peine d'y penser, mais serait certainement aimerais savoir si vous pouvez l'éviter.
OriginalL'auteur rima | 2010-08-05
Vous devez vous connecter pour publier un commentaire.
Oui, Hibernate prend en charge les requêtes polymorphiques. À partir de la documentation:
C'est le comportement par défaut (appelé implicite polymorphisme) et Hibernate supporte à la fois implicite et explicite polymorphisme:
Cela peut être configuré au niveau de la classe. Utilisation
polymorphism="explicit"
si vous êtes si vous utilisez des mappages xml, voir 5.1.3 Classe. L'utilisation de Hibernate@Entity
annotation si vous utilisez des annotations, voir 2.4.1. Entité. Ci-dessous un exemple:OriginalL'auteur Pascal Thivent
Supposons que vous disposez d'une structure de classe comme suit:
puis lorsque vous sélectionnez tous les
Animal
s, vous vous attendez à charger tous lesDog
s etCat
s. Après tout, ils sontAnimal
s.Une autre histoire sont les associations. Vous pouvez créer, vous mappages tels que les associations sont paresseux de charge au lieu d'désireux de charge.
Pour le chargement paresseux de un-à-un, voir: community.jboss.org/wiki/... ou stackoverflow.com/questions/389026/... Pour le chargement paresseux de un-à-plusieurs, voir nhforge.org/doc/nh/en/index.html#collections-lazy
Ce serait le travail pour les associations (a-relations). Serait-il travailler pour des requêtes Polymorphiques (est-un)?
OriginalL'auteur Manfred
Fondamentalement, c'est la valeur par défaut de l'ORM de l'héritage de modèle de conception utilisé par Hibernate appelé l'héritage de classe (toutes les classes sont mappés à un seul tableau), si vous voulez changer ce que vous pouvez google:
- classe unique hierarhy ou une table par classe (cette carte a chaque classe à une autre table dans la DB)
en béton de classe hierarhy (cette carte ne la des implémentations concrètes à une table).
OriginalL'auteur Mateusz Dymczyk
Pour éviter de multiples rejoint au cours de la classe de la hiérarchie de l'extraction, vous pouvez appliquer SINGLE_TABLE hiérarchie stratégie de mapping, et de définir des tableaux secondaires sur les sous-classes avec chargement par SELECT stratégie. Cependant, ce que vous avez fait "lourd rejoindre le" modèle "N+1 sélectionnez" modèle. L'exemple:
Et ce que SQL est fait sur
from Super
requête HQL:Plus sur cette approche générale et hibernate performance de conseils, que vous pouvez lire dans mon article.
OriginalL'auteur Łukasz Frankowski