2010-12-17 37 views
7

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

cevap

9

Bu çalışır.

+0

Aynı şey Criterias ile yapılabilir mi? –

+0

Güzel. Ben bu JPA ayrılma kısıtlama sorgusu daha iyi bilinen oldu keşke! Bir sürü zaman harcadım. –

İlgili konular