NHibernate: consulta de muchos a muchos utilizando la tabla de unión / unión

He encontrado preguntas muy similares aquí, pero ninguna que coincida exactamente con lo que estoy buscando. Los dos hilos más cercanos que he encontrado son (sí, son hilos diferentes):

NHibernate criterios de muchos a muchos (1)

NHibernate criterios de muchos a muchos (2)

Sin embargo, creo que ambos están usando relaciones directas de muchos a muchos. De hecho, estoy simulando la relación Muchos a Muchos al tener dos relaciones Uno a Muchos con una tabla de unión, lo cual es una práctica bastante estándar. Aquí están mis asignaciones de NHibernate:

Archivos:

<class name="Files" table="files">
  <id name="id">
    <generator class="identity" />
  </id>
  <property name="name" />

  <bag name="files_attrs" table="files_attrs" lazy="true">
    <key column="file_id" />
    <one-to-many class="Files_Attrs" />
  </bag>
</class>

Atributos:

<class name="Attrs" table="attrs">
  <id name="id">
    <generator class="identity" />
  </id>
  <property name="name" />
  <property name="value" />

  <bag name="files_attrs" table="files_attrs" lazy="true">
    <key column="attr_id" />
    <one-to-many class="Files_Attrs" />
  </bag>
</class>

Carpintero:

<class name="Files_Attrs" table="files_attrs">
  <id name ="id">
    <generator class="identity" />
  </id>
  <many-to-one name="file" cascade="all" column="file_id" />
  <many-to-one name="attr" cascade="all" column="attr_id" />
</class>

Entonces, mi problema es exactamente como el segundo enlace anterior, pero hecho con una tabla de unión. Entonces:

Dado un conjunto de ID de atributos, espero ejecutar una consulta que me proporcione los archivos que tienen TODOS esos atributos coincidentes. Puedo ejecutar fácilmente "n" consultas para cada ID de atributo en el conjunto y comparar cada lista de ID de archivos que aparecen en cada lista, pero creo que debería haber una manera más fácil de hacer todo esto de una vez con una sola consulta.

Ejemplo:

File      | Attributes
----------+-----------------------------------------------------
foo.txt   | (mode = read-only,                    view = visible)
bar.txt   | (mode = read-write, security = all,   view = visible)
duck.txt  | (mode = read-only,                    view = hidden)
goose.txt | (more = read-only,  security = owner, view = visible)

Dados estos atributos:mode = read-only yview = visible, Solo quiero que me devuelvanfoo.txt ygoose.txt.

Puede alguien ayudarme con esto? Gracias.

Respuestas a la pregunta(2)

Su respuesta a la pregunta