2010-06-21 6 views
7

J'ai une classe qui a une collection, mappée comme un sac dans mon fichier de mappage nHibernate pour cette classe, et je souhaite retourner toutes les instances de cette classe dont la collection a un ou plusieurs des objets que je passe dansVérification de l'intersection de deux collections via HQL

Exemple:.

ma classe parent est appelé DocumentDefinition. Il possède une collection de rôles, qui est une entité nHibernate, à laquelle le document peut être accédé par. Ces deux sont connectés via un mappage Many-To-Many. Je veux transmettre la requête une collection de rôles et retourner toutes les instances de DocumentDefinition qui ont un ou plusieurs d'un de ces rôles passés dans

Mapping sur la classe parent, DocumentDefinition.

<bag name="AllowedRoles" table="Many-To-Many Table" lazy="false"> 
     <key column="ParentDefinition" /> //Column from Many-To-Many Table 
     <many-to-many class="MyRolesClass" column="ParentRole" /> //Column from Many-To-Many Table 
</bag> 

Exemple de ce que je ont essayé jusqu'à présent.

Select distinct d from DocumentDefinition d, MyRolesClass r where r in :roles and r in elements(d.Group) 

les rôles étant la collection Je veux passer

alors, comment dois-je faire une requête pour renvoyer DocumentDefi nitions où r (Roles Class) figure à la fois dans la liste de paramètres transmise et dans la collection sur l'objet DocumentDefinition.

Espérons que c'est clair! À votre santé!

Répondre

7

Vous étiez très proche ... la requête doit être:

select distinct d 
from DocumentDefinition d, MyRolesClass r 
where r in (:roles) and r in elements(d.AllowedRoles) 

Et vous envoyer les rôles souhaités à l'aide .SetParameterList("roles", collectionOfRoles). Par ailleurs, j'ai changé le nom de la collection qui ne correspondait pas au mappage que vous avez publié.

Encore une chose à considérer: lazy = "false" est presque toujours une mauvaise idée pour les collections.

+0

À la votre! Travaillé parfaitement. Je ne peux pas croire que je n'ai pas compris! Désolé pour la cartographie. Je change les noms pour les rendre plus faciles à comprendre que les noms réels, hors contexte. – Damien

Questions connexes