Nhibernate で複合 ID のキーと多対 1 の関連付けをナビゲートすることは可能ですか?
次の設定でマップした (レガシー) テーブルがいくつかあります。
<class name="StructureUser">
<composite-id>
<key-many-to-one name="Structure" class="Structure" column="STRUKTUR_ID" />
<key-many-to-one name="User" class="User" column="USERID" />
</composite-id>
...
</class>
<class name="Structure">
<id name="Id" column="id" type="Int32" >
<generator class="native"/>
</id>
<property name="Low" column="low" type="Int32" />
...
</class>
クエリで StructureUser クラスを介して Structure の "Low" プロパティにアクセスしたいと考えています。考えられる Criteria API のすべての使用法を試しましたが、常にエラーが発生しました。私が試した2つのクエリは次のとおりです。
ICriteria crit1 = Session.CreateCriteria(typeof(StructureUser))
.CreateAlias("Structure", "struc")
.Add(Restrictions.Le("struc.Low", 123));
ICriteria crit2 = Session.CreateCriteria(typeof(StructureUser))
.Add(Restrictions.Le("Structure.Low", 123));
crit1 のエラーはデータベースから発生し、"struc_1.Low はこのコンテキストでは有効ではありません" と表示されます。これは、NHibernate が sql コマンドの制限に必要な結合を生成しないためです。crit2 のエラーは NHibernate に由来し、StructureUser の「Structure.Low」プロパティにアクセスできないことを示しています。
この問題は、複合 ID を key-property 要素で宣言し、通常の多対 1 要素との関係を宣言することで回避しました。
この問題の別の解決策はありますか?