NHibernate - Viele-zu-Viele-Abfrage mit Junction / Joiner-Tabelle

Ich habe hier sehr ähnliche Fragen gefunden, aber keine, die genau dem entsprechen, wonach ich suche. Die beiden nächsten Threads, die ich gefunden habe, sind (ja, sie sind unterschiedliche Threads):

Überwiegen Sie viele-zu-viele-Kriterien (1)

Überwiegen Sie viele-zu-viele-Kriterien (2)

Ich denke jedoch, dass beide direkte Viele-zu-Viele-Beziehungen verwenden. Tatsächlich simuliere ich die Viele-zu-Viele-Beziehung, indem ich zwei Eins-zu-Viele-Beziehungen mit einer Junction-Tabelle habe, was ziemlich üblich ist. Hier sind meine NHibernate-Zuordnungen:

Dateien:

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

Attribute:

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

Schreiner:

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

Mein Problem ist also genau wie beim zweiten Link oben, aber mit einer Kreuzungstabelle erledigt. Damit:

Angesichts einer Reihe von Attribut-IDs hoffe ich, eine Abfrage ausführen zu können, die mir die Dateien mit ALLEN übereinstimmenden Attributen liefert. Ich kann problemlos "n" Abfragen für jede Attribut-ID im Satz ausführen und jede Liste nach Datei-IDs vergleichen, die in jeder Liste enthalten sind. Ich bin jedoch der Meinung, dass es eine einfachere Möglichkeit geben sollte, dies mit einer Abfrage auf einmal zu tun.

Beispiel:

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)

Angesichts dieser Attribute:mode = read-only undview = visibleIch möchte nur zurückgegeben werdenfoo.txt undgoose.txt.

Kann mir jemand dabei helfen? Vielen Dank.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage