[英]Is navigation through composite-id's key-many-to-one possible?
是否可以在Nhibernate中瀏覽復合ID的鍵多對一關聯?
我有一些(舊)表,它們使用以下設置進行映射:
<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的“低”屬性。 我嘗試了可能想到的Criteria API的所有用法,但始終會出錯。 這是我嘗試過的兩個查詢:
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”屬性。
我通過聲明帶有鍵屬性元素的Composite-id並聲明了與普通多對一元素的關系來解決這個問題。
這個問題還有其他解決方案嗎?
你有沒有嘗試過
ICriteria crit1 = Session.CreateCriteria(typeof(StructureUser))
.CreateCriteria("Structure", "struc")
.Add(Restrictions.Le("struc.Low", 123));
我有一個類似的問題。
就像原始海報所說的那樣,您需要在要別名的組合鍵上的元素上添加多對一關系, 並且需要將屬性“ insert”和“ update”設置為“ false” 。
然后,您可以將其保留在Composite-id中,而無需將其更改為鍵屬性元素。
<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>
<many-to-one name="Structure" class="Structure" column="STRUKTUR_ID" insert="false" update="false" />
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.