從來沒有問過這裏的一個問題,我會盡量簡潔地說明這一點。NHibernate一對多連接子類
我有一個食譜類,其中包含三種不同類型的成分用途列表。這些類都從基礎IngredientUse繼承。所以映射如下所示:
<class name="IngredientUse" table="IngredientUses">
<id name="Id" type="Int64" column="Id">
<generator class="native"/>
</id>
<!--some other properties-->
<property name="RecipeId" column="RecipeId"/>
<joined-subclass name="AdditionUse" table="AdditionUses">
<key column="Id" foreign-key="FK_AdditionUses_IngredientUses"/>
<many-to-one name="AdditionUsed" column="AdditionUsed" class="Addition" foreign-key="FK_AdditionUses_Additions"/>
</joined-subclass>
</class>
這裏引起問題的是RecipeId。從配方,我有不同的成分類型的用途,像這樣定義的三個不同的列表:
<bag name="AdditionsUsed" cascade="all" lazy="false">
<key column="RecipeId"/>
<one-to-many class="AdditionUse"/>
</bag>
現在,我遇到了問題試圖加載這些列表。它與繼承有關。當我看到生成的SQL,我看到:
SELECT additionsused0_.RecipeId as RecipeId1_
--other columns not really important
FROM AdditionUses additionsused0_
inner join IngredientUses additionsused0_1_
on additionsused0_.Id=additionsused0_1_.Id
WHERE [email protected]; @p0 = '11'
公告稱,其尋找在子類中的RecipeId表中,而不是在列實際上包含基表。我知道我可以爲每種成分類型定義一個單獨的表格,但是這會導致我的問題,因爲在某些情況下(即定價),我不需要子類表中的額外列,並且希望能夠一次加載所有成分到同一個列表中。
我確定我必須在這裏丟失一些東西,認爲有人更熟悉NHibernate在這個網站上可能會認出它的權利。
在此先感謝。
編輯:如果我不清楚我想做什麼,這張圖可能有幫助(原諒我的僞劣UML,希望它不會渾水)。還有一個成分基類,以及相同的亞類。
多數民衆贊成的東西,我不想映射到AdditionUse表映射實體,我想映射到Ingredient使用表格,使用AdditionUse作爲過濾器和額外信息。我想我需要放棄NHibernate,或者重新思考我的表是如何設置的。感謝您的迴應。 – AlexCuse 2009-03-01 14:57:57