2010-06-21 6 views
7

Tengo una clase que tiene una colección, asignada como una bolsa en mi archivo de mapeo nHibernate para esa clase, y deseo devolver todas las instancias de esa clase cuya colección tiene uno o más de los objetos que me pase enComprobando la intersección de dos colecciones a través de HQL

Ejemplo:.

Mi clase principal se llama DocumentDefinition. Tiene una colección de Roles, que es una entidad nHibernate, a la que se puede acceder al documento. Estos dos están conectados mediante un mapeo Many-To-Many. Quiero pasar la consulta de una colección de papeles y devolver todos los casos DocumentDefinition que tienen uno o más de uno de esos papeles aprobadas en

Mapeo de la clase de padres, 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> 

ejemplo de lo que han intentado hasta ahora:.

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

Roles siendo la colección deseo de pasar en

Entonces, ¿cómo hago una consulta para devolver DocumentDefi nitions donde r (Roles Class) está tanto en la lista de parámetros pasada como en la colección en el objeto DocumentDefinition.

Espero que esté claro! ¡Aclamaciones!

Respuesta

7

Usted estaban muy cerca ... la pregunta debería ser:

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

y enviarle los papeles deseados utilizando .SetParameterList("roles", collectionOfRoles).

Por cierto, cambié el nombre de la colección que no coincide con la asignación que ha publicado.

Una cosa más a tener en cuenta: lazy = "false" es casi siempre una mala idea para las colecciones.

+0

¡Salud! Funcionó perfectamente No puedo creer que no lo haya conseguido Perdón por el mapeo. Cambio los nombres para que sean más fáciles de entender que los reales, fuera de contexto, lo serían. – Damien

Cuestiones relacionadas