J'ai un arbre où chaque noeud est une classe de ressources: comme vous pouvez voir cette classeNHibernate one-to-many chargement paresseux quand déjà chargé
public abstract class Resource
{
public virtual Guid Id { get; set; }
public virtual Resource Parent { get; set; }
public virtual IList<Resource> ChildResources { get; set; }
}
est abstrait et il y a beaucoup de différentes classes dérivées de Ressource (3 en ce moment, plus à venir).
Dans ma base de données j'ai une table pour la ressource, et une table pour chaque classe qui dérive de la ressource. Ceux-ci sont mappés avec <joined-subclass>
.
J'ai lu ceci:
et j'ai le même code que Ayende pour charger mon arbre:
var resource = UnitOfWork.Current.Session
.CreateQuery("from Resource r join fetch r.ChildResources")
.SetResultTransformer(new DistinctRootEntityResultTransformer())
.SetReadOnly(true)
.List<Resource>();
qui est tout fonctionne bien (toutes les ressources sont retournés avec un seul select) Cependant, je vois des sélections supplémentaires survenant lorsque j'énumère la liste ChildResources d'une ressource.
Est-ce à cause de cela ?:
De toute façon, comment empêcher que cela se produise?
est ici la partie des correspondances pour les relations (noms de classe parés pour plus de clarté):
<bag cascade="save-update" fetch="join" lazy="false" inverse="true" name="ChildResources">
<key>
<column name="Parent_Id" />
</key>
<one-to-many class="Resource" />
</bag>
<many-to-one class="Resource" name="Parent">
<column name="Parent_Id" />
</many-to-one>
Merci
MISE À JOUR
de surveillance légère, sa seule émission sélectionne supplémentaires lorsque énumérer les collections enfants des nœuds feuilles dans l'arbre ...
Quels sont les voyez-vous sélectionne? – Mark
le premier 'select' avec les' jointures à gauche' pour les 'sous-classes jointes' renvoie toutes les ressources. Les sélections supplémentaires sont ce que je m'attendrais à voir dans une situation de charge paresseuse; 'select from Ressources où parent_id = foo' –
voir ma mise à jour dans le q –