NHibernate HQL: left-outer-join mit "mit" - Klausel funktioniert nicht

In eine EAV-system, ich habe ein mapping, das wie folgt aussieht:

<class name="Record">
   <map name="Values" table="RecordFieldValue">
      <key column="RecordFK">
      <index column="FieldFK">
      <element column="Value">
   </map>
</class>

Ich würde gerne wählen Sie einige Datensätze, geordnet nach dem Wert, der jeden Datensatz für ein bestimmtes Feld. Beachten Sie jedoch, dass nicht alle Datensätze auch tatsächlich einen Wert haben für dieses Feld. In diesem Fall sollte der Datensatz immer noch abgerufen und sortiert mit einem null-Wert.

Den gewünschten SQL würde das so Aussehen:

select rec.*, val.Value
from Record rec
left outer join RecordFieldValue val
on val.RecordFK = rec.PK and val.FieldFK = :field
order by val.Value

Nach viel Graben fand ich, dass die richtige Art und Weise zu ändern, die "auf" - Klausel der left join in HQL ist mit dem "mit" - Schlüsselwort (siehe https://nhibernate.jira.com/browse/NH-514). So habe ich versucht, diese HQL:

from Record rec
left join rec.Values vals with index(vals) = :field
order by vals

Leider, dies erzeugt die folgende Fehlermeldung: with-Klausel-Ausdrücke nicht-Referenz-from-Klausel-element, auf das der with-Klausel verbunden war. So habe ich versucht, dieses statt:

from Record rec
left join rec.Values vals with index(rec.Values) = :field
order by vals

Aber das produziert einen neuen Fehler: with-Klausel kann nur Spalten referenzieren die in die treibende Tabelle.

Irgendwelche Ideen auf, wie um diese Arbeit zu bekommen? Danke.

-- Brian

InformationsquelleAutor brianberns | 2010-12-17
Schreibe einen Kommentar