Bir EAV sisteminde, şu şekilde görünen bir eşleştirmem var:NHibernate HQL: "with" deyimi ile sol dış birleştirme çalışmıyor
<class name="Record">
<map name="Values" table="RecordFieldValue">
<key column="RecordFK">
<index column="FieldFK">
<element column="Value">
</map>
</class>
Belirli bir Alan için her Kaydın değerine göre sıralı bazı Kayıtları seçmek istiyorum. Ancak, tüm Kayıtların aslında bu Alan için bir Değere sahip olmayacağını unutmayın. Bu durumda, kayıt hala getirilmeli ve boş bir değerle sıralanmalıdır.
İstenilen SQL şöyle görünecektir:
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
Çok fazla kazma işleminden sonra, HQL'de sol birleştirmenin "on" maddesinin değiştirilmesinin doğru yolunun "with" ile olduğunu gördüm. anahtar kelime (bkz. https://nhibernate.jira.com/browse/NH-514). Bu yüzden bu HQL'yi çalıştı:
from Record rec
left join rec.Values vals with index(vals) = :field
order by vals
Ne yazık ki, bu aşağıdaki hatayı üretir: with-yan tümce ifadeleri ile birlikte-yan tümce ile ilişkili öğeye başvurmadı. Bu yüzden şunu deneyin:
from Record rec
left join rec.Values vals with index(rec.Values) = :field
order by vals
Ancak bu yeni bir hata üretti: ile yan tümce yalnızca sürücü tablosundaki sütunlara başvuruda bulunabilir.
Bu işi nasıl alacağınıza dair herhangi bir fikir var mı? Teşekkürler.
- Brian
Aynı şey Criterias ile yapılabilir mi? –
Güzel. Ben bu JPA ayrılma kısıtlama sorgusu daha iyi bilinen oldu keşke! Bir sürü zaman harcadım. –