Je dispose d'un modèle d'objet comme celui-ci:Nhibernate: résultats distincts en deuxième niveau Collection
class EntityA
{
...
IList<EntityB> BList;
...
}
class EntityB
{
...
IList<EntityC> CList;
}
Je dois aller chercher tous les colelctions (Blist dans l'Entité et CList dans l'Entité), parce que si tous seront nécessaires pour faire quelques opérations, si je ne les charge pas avec empressement, j'aurai le problème de sélection n + 1. Ainsi, la requête était la suivante:
select a from EntityA a left join fetch a.BList b left join fetch b.CList c
Le problème de poing i face à cette requête, a été le retour des doublons de la DB, j'ai eu des doublons entityA, à cause de la gauche join fetch avec BList. Une lecture rapide à travers la documentation d'hibernation et il y avait quelques solutions, d'abord j'ai essayé le mot clé distinct qui ne serait pas répliquer le mot clé SQL distinct sauf dans certains cas, peut-être c'était un de ces cas je ne peux pas sélectionner les colonnes de texte distict (colonne [Observations] dans la table EntityA). Donc, j'ai utilisé l'une des autres solutions:
query.SetResultTransformer(new DistinctRootEntityResultTransformer());
Cela a bien fonctionné. Mais le résultat des opérations ne passait toujours pas les tests. J'ai vérifié plus loin et j'ai découvert que maintenant il y avait des doublons d'EntityB, à cause de la recherche de jointure gauche avec CList. La question est, comment puis-je utiliser le distinct dans une collection de second niveau? J'ai cherché et je ne trouve que des solutions pour la collecte des enfants de l'entité racine directe, mais jamais pour la deuxième collections enfants de niveau ...
Merci pour votre temps
Voir ma réponse à cette [question] [1] (qui est presque une copie identique :-)) [1]: http: // stackoverflow.com/questions/7614661/chargement-multi-niveau-collections-sans-doublons-in-nhibernate/7615646 # 7615646 – Goblin