2009-07-01 229 views
0

我正在使用NHibernate。我有兩個表: 所有者 具有休眠鍵映射問題

<id name="SpecificNumber" column="SpecificNumber" type="int"> 
    <generator class="assigned"/> 
</id> 
<set name="SubTable" table="SubTable"> 
    <key column="Owner_id"/> 
    <one-to-many class="SubTable"/> 
</set> 

和一張桌子 子表

具有

<many-to-one name="Owner" class="Owner" column="Owner_id"/> 

現在我的C#類業主沒有Owner_id屬性,我的子表類也沒有一個。儘管我的SubTable類具有類型所有者的屬性。

在數據庫中,一切似乎都是正確的。然而,當我嘗試使用下面的語句檢索符合特定所有者-ID,其中某些子表,行

ICriteria criteria = session.CreateCriteria<SubTable>(); 
criteria.Add(Expression.Eq("Owner_id",3)); 

我得到這個異常:

「無法解析屬性:Owner_id的:子表」

所以我想冬眠會讓SubTable類也有Owner_id屬性。有沒有辦法做到這一點,而不這樣做?我的SubTable類有一個屬性,它擁有一個對所有者對象本身的引用。這應該不夠嗎?或者,在休眠時選擇這種連接的最佳方式是什麼,而不會太多地混淆模型?

我想要實現的是,所有者的SpecificNumber被用作SubTable中的引用。我想查詢具有某個所有者的行的子表。

謝謝!

回答

2

在您的條件查詢中,您不應該引用數據庫中的列(因爲我可以看到,Owner_id是表中的列),但您應該在對象上使用屬性。 ICriteria API和HQL查詢適用於您的對象(及其屬性),因此,您不應該引用db-columns。

ICriteria crit = session.CreateCriteria <SubTable>(); 
crit.AddAlias ("Owner", "o"); 
crit.Add (Expression.Eq("o.SpecificNumber", 23)); 
+0

謝謝兄弟!你幫了我很多。 – noisecoder 2009-07-02 00:22:22