NHibernate - consulta muitos a muitos usando a junção / tabela de junção

Encontrei perguntas muito semelhantes aqui, mas nenhuma que corresponda exatamente ao que estou procurando. Os dois threads mais próximos que encontrei são (sim, são threads diferentes):

NHibernate critérios muitos para muitos (1)

NHibernate critérios muitos para muitos 2)

No entanto, acho que ambos estão usando relacionamentos diretos de muitos para muitos. Na verdade, estou simulando o relacionamento Muitos-para-Muitos, tendo dois relacionamentos Um-para-Muitos com uma tabela de junção, o que é uma prática bastante comum. Aqui estão meus mapeamentos do NHibernate:

Arquivos:

<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>

Marceneiro:

<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>

Portanto, meu problema é exatamente como o segundo link acima, mas foi feito com uma tabela de junção. Assim:

Dado um conjunto de IDs de Atributo, espero executar uma consulta que me forneça os arquivos que possuem TODOS esses Atributos correspondentes. Posso executar facilmente "n" consultas para cada ID de Atributo no conjunto e comparar cada lista com as IDs de Arquivos que aparecem em todas as listas, mas acho que deve haver uma maneira mais fácil de fazer isso de uma só vez com uma consulta.

Exemplo:

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 esses atributos:mode = read-only eview = visible, Quero ser devolvido apenasfoo.txt egoose.txt.

Alguém pode me ajudar com isso? Obrigado.

questionAnswers(2)

yourAnswerToTheQuestion