簡體   English   中英

是否可以通過Composite-ID的“多對一”鍵進行導航?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM