2009-04-14 6 views
1

J'ai une entité Recette et il a 3 collections d'images, de commentaires et d'ingrédients. Ils sont cartographiés comme un sac.Nhibernate - Impossible d'extraire plusieurs collections dans une seule requête

Pour un site web Je veux charger les collections de recettes avec la recette iE charge pas paresseux, donc je découvert que je pouvais le faire en utilisant cette requête:

from Recipe r 
left join fetch r.Images 
left join fetch r.Ingredients 
left join fetch r.Comments 

Mais cela donne une exception:

Impossible de récupérer plusieurs collections en une seule requête si l'un d'eux est un sac

Alors, comment puis-je pas paresseux charge mon recette et faire charger les collections en tenant compte du fait qu'il ne peut y avoir aucune ligne dans cette collection? Je suis nouveau à ceci et ai besoin d'une explication.

Répondre

0

Mappez les collections en tant qu'ensemble.

Un sac est une collection qui peut contenir plusieurs copies du même article.

1

Le passage aux ensembles le permettra, mais êtes-vous sûr que c'est ce que vous voulez faire?

'Extraire plusieurs collections enfants de cette manière est potentiellement très mauvais pour les performances de votre système. Vous pourriez très facilement vous retrouver avec un produit cartésien récupérant plusieurs fois le nombre de lignes dont vous avez besoin dans la base de données.

Ayende souligne le problème potentiel here

Vous voudrez peut-être regarder session.CreateMultiQuery() ou session.CreateMultiCriteria() à la place.

1

Pour éviter une requête cartésienne. J'exécuterais 3 requêtes en utilisant des futures et des jointures externes.

Questions connexes