Saya takut, itu tidak akan berhasil. Berdasarkan desain dan sifat <join>
. Sebagaimana dinyatakan dalam dokumentasi:
Cara bagaimana (saya lakukan) memecahkan masalah ini sedikit berbeda. Saya memiliki objek Language
, Opsi memiliki kumpulan bahasa
public virtual IList<Language> Languages {get; set;}
Pemetaan misalnya <bag>
<bag name="Languages" batch-size="25"
cascade="all-delete-orphan" inverse="true" >
<key column="option_id" />
<one-to-many class="Language" />
<filter name="LanguagFilter" condition=":languageId = LanguageId" />
</bag>
Triknya ada di filter . Ini adalah versi dinamis dari di mana mapping-attribute (18.1. NHibernate filter)
<filter-def name="LanguageFilter" >
<filter-param name="languageId" type="Int32" />
</filter-def>
Kemudian, kita dapat mengaktifkan filter, untuk semua operasi sesi saat ini. Hanya sekali per permintaan (jika aplikasi web), di dalam beberapa AOP, di mana kita mengetahui id bahasa:
var filter = session.EnableFilter("LanguageFilter");
filter.SetParameter("languageId", theCurrentLanguageIdFromUser);
Dan akhirnya, kita tahu, bahwa kumpulan Bahasa hanya berisi satu record dan kita selalu dapat mengakses .First()
. Tidak ada lagi banyak hasil dengan lebih banyak bahasa
Lihat juga:https://stackoverflow.com/a/16625867/1679310 , https://stackoverflow.com/a/18479266/1679310