In einem EAV-System funktioniert, ich habe eine Abbildung, die wie folgt aussieht:NHibernate HQL: links mit Outer-Joins „mit“ -Klausel nicht
<class name="Record">
<map name="Values" table="RecordFieldValue">
<key column="RecordFK">
<index column="FieldFK">
<element column="Value">
</map>
</class>
Ich mag einige Datensätze wählen, um den Wert bestellt von jedem Datensatz für ein bestimmtes Feld. Beachten Sie jedoch, dass nicht alle Datensätze tatsächlich einen Wert für dieses Feld haben. In diesem Fall sollte der Datensatz immer noch abgerufen und mit einem Nullwert sortiert werden.
Die gewünschte SQL würde wie folgt 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 zu graben, fand ich, dass der richtige Weg, die „auf“ -Klausel der linken in HQL beitreten zu ändern ist mit dem „mit“ Schlüsselwort (siehe https://nhibernate.jira.com/browse/NH-514). Also habe ich versucht, diese HQL:
from Record rec
left join rec.Values vals with index(vals) = :field
order by vals
Leider ist dies erzeugt die folgenden Fehler: mit-Klausel Ausdrücke nicht aus-Klausel Referenzelement, an dem die mit-Klausel wurde verbunden. Also habe ich versucht, diese stattdessen:
from Record rec
left join rec.Values vals with index(rec.Values) = :field
order by vals
Aber die einen neuen Fehler erzeugt hat: mit Klausel nur Spalten in der Ansteuertabelle verweisen kann.
Irgendwelche Ideen, wie man diese Arbeit bekommt? Vielen Dank.
- Brian
Kann das gleiche mit Criterias gemacht werden? –
Schön. Ich wünschte, dass JPA Link Join Restriktion Abfrage wurde besser bekannt! Ich habe eine Menge Zeit verschwendet. –